欧美成人午夜免费全部完,亚洲午夜福利精品久久,а√最新版在线天堂,另类亚洲综合区图片小说区,亚洲欧美日韩精品色xxx

千鋒扣丁學(xué)堂Python培訓(xùn)之實(shí)現(xiàn)多線程/多進(jìn)程的TCP服務(wù)器

2019-09-03 14:52:23 4371瀏覽

今天千鋒扣丁學(xué)堂Python培訓(xùn)老師給大家分享一篇關(guān)于Python實(shí)現(xiàn)多線程/多進(jìn)程的TCP服務(wù)器的詳細(xì)介紹,首先背景:傳感器設(shè)備需要將收集的數(shù)據(jù)發(fā)到服務(wù)器上,前期想寫一個(gè)簡(jiǎn)單的服務(wù)器來測(cè)試下使用效果,設(shè)備收集的數(shù)據(jù)非常的重要,所以考慮使用TCP協(xié)議來實(shí)現(xiàn)。因?yàn)橹皇菧y(cè)試使用,所以采用多線程的方式,畢竟節(jié)省資源嘛(使用協(xié)程時(shí)會(huì)導(dǎo)致I/O阻塞)。



一、tcp_server_v1.0使用說明:

1.運(yùn)行環(huán)境:python3解釋器,并安裝socket、threading模塊;

2.該版本使用多線程實(shí)現(xiàn)的多任務(wù);

3.支持多臺(tái)設(shè)備同時(shí)連接,并同時(shí)提供服務(wù)。

二、代碼邏輯:

指定服務(wù)器運(yùn)行端口為:8125

創(chuàng)建一個(gè)服務(wù)器類

實(shí)例化一個(gè)服務(wù)器對(duì)象

服務(wù)器對(duì)象調(diào)用類中的方法

1初始化服務(wù)器屬性(def__init__)

1.1創(chuàng)建套接字

1.2解決程序端口占用問題

1.3綁定本地ip地址

1.4將套接字變?yōu)楸O(jiān)聽套接字,最大連接數(shù)量為100

2定義設(shè)備連接方法(defrun_forever)

2.1進(jìn)入循環(huán)

2.2等待設(shè)備連接...

2.2.1當(dāng)設(shè)備連接,打印設(shè)備的ip和port

2.2.2創(chuàng)建線程,調(diào)用業(yè)務(wù)處理方法,為該設(shè)備提供服務(wù)

3業(yè)務(wù)處理方法(defservice_machine)

3.1進(jìn)入循環(huán)

3.2等待接收設(shè)備發(fā)送數(shù)據(jù)...

3.2.1當(dāng)服務(wù)器接收到數(shù)據(jù)

3.2.2判斷數(shù)據(jù)是否為空

否:打印數(shù)據(jù)內(nèi)容,進(jìn)行業(yè)務(wù)處理,將處理后的數(shù)據(jù)結(jié)果返回給設(shè)備

是:打印設(shè)備斷開連接,退出循環(huán),關(guān)閉套接字

代碼實(shí)現(xiàn)如下:

#!C:\Python3.6.5\python.exe
# -*- coding: gbk -*-
 
import socket
import threading
 
class WSGIServer(object):
 def __init__(self, port):
 """初始化對(duì)象"""
 # 創(chuàng)建套接字
 self.tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
 # 解決程序端口占用問題
 self.tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
 # 綁定本地ip地址
 self.tcp_server_socket.bind(("", port))
 # 將套接字變?yōu)楸O(jiān)聽套接字,最大連接數(shù)量為100
 self.tcp_server_socket.listen(100)
 
 def run_forever(self):
 """設(shè)備連接"""
 while True:
  # 1.等待設(shè)備連接(通過ip地址和端口建立tcp連接)
  # 如果有設(shè)備連接,則會(huì)生成用于設(shè)備和服務(wù)器通訊的套接字:new_socket
  # 會(huì)獲取到設(shè)備的ip地址和端口
  new_socket, client_addr = self.tcp_server_socket.accept()
  print("設(shè)備{0}已連接".format(client_addr))
 
  # 2.創(chuàng)建線程處理設(shè)備的需求
  t1 = threading.Thread(target=self.service_machine, args=(new_socket, client_addr))
  t1.start()
 
 def service_machine(self, new_socket, client_addr):
 """業(yè)務(wù)處理"""
 while True:
  # 3.接收設(shè)備發(fā)送的數(shù)據(jù),單次最大1024字節(jié),按‘gbk'格式解碼
  receive_data = new_socket.recv(1024).decode("gbk")
  # 4.如果設(shè)備發(fā)送的數(shù)據(jù)不為空
  if receive_data:
  # 4.1 打印接收的數(shù)據(jù),這里可以將設(shè)備發(fā)送的數(shù)據(jù)寫入到文件中
  # 獲取設(shè)備的ID信息
  print(receive_data)
  if receive_data[0:6] == "report":
   response = "SET OK:" + receive_data
  else:
   receive_data = receive_data[6:].split(",")[0]
   # 拼接響應(yīng)數(shù)據(jù)
   response = "alarm=" + receive_data + ",Switch:clear"
  print(response)
  # 4.2 返回原數(shù)據(jù)作為應(yīng)答,按‘utf-8'格式編碼
  new_socket.send(response.encode("utf-8"))
  # 5.當(dāng)設(shè)備斷開連接時(shí),會(huì)收到空的字節(jié)數(shù)據(jù),判斷設(shè)備已斷開連接
  else:
  print('設(shè)備{0}斷開連接...'.format(client_addr))
  break
 
 # 關(guān)閉套接字
 new_socket.close()
 
 
def main(port):
 """創(chuàng)建一個(gè)WEB服務(wù)器"""
 wsgi_server = WSGIServer(port)
 print("服務(wù)器已開啟")
 wsgi_server.run_forever()
 
 
 
if __name__ == '__main__':
 port = 8125 # 指定端口
 main(8125)

以上就是關(guān)于千鋒扣丁學(xué)堂Python培訓(xùn)之實(shí)現(xiàn)多線程/多進(jìn)程的TCP服務(wù)器的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,想要了解更多程序員需要注意問題的小伙伴可以登錄扣丁學(xué)堂官網(wǎng)查看。了解更多關(guān)于Python和人工智能方面內(nèi)容,請(qǐng)關(guān)注扣丁學(xué)堂Python培訓(xùn)官網(wǎng)、微信等平臺(tái),扣丁學(xué)堂IT職業(yè)在線學(xué)習(xí)教育平臺(tái)為您提供權(quán)威的Python開發(fā)環(huán)境搭建視頻,Python培訓(xùn)后的前景無限,行業(yè)薪資和未來的發(fā)展會(huì)越來越好的,扣丁學(xué)堂老師精心推出的Python視頻教程定能讓你快速掌握Python從入門到精通開發(fā)實(shí)戰(zhàn)技能??鄱W(xué)堂Python技術(shù)交流群:279521237。


扣丁學(xué)堂微信公眾號(hào)                          Python全棧開發(fā)爬蟲人工智能機(jī)器學(xué)習(xí)數(shù)據(jù)分析免費(fèi)公開課直播間


      【關(guān)注微信公眾號(hào)獲取更多學(xué)習(xí)資料】         【掃碼進(jìn)入Python全棧開發(fā)免費(fèi)公開課】



查看更多關(guān)于"Python開發(fā)資訊"的相關(guān)文章>

標(biāo)簽: Python培訓(xùn) Python視頻教程 Python在線視頻 Python學(xué)習(xí)視頻 Python培訓(xùn)班

熱門專區(qū)

暫無熱門資訊

課程推薦

微信
微博
15311698296

全國(guó)免費(fèi)咨詢熱線

郵箱:codingke@1000phone.com

官方群:148715490

北京千鋒互聯(lián)科技有限公司版權(quán)所有   北京市海淀區(qū)寶盛北里西區(qū)28號(hào)中關(guān)村智誠(chéng)科創(chuàng)大廈4層
京ICP備2021002079號(hào)-2   Copyright ? 2017 - 2022
返回頂部 返回頂部