[以太网/USB/其他总线] 做物联网通信中,TCP服务端如何和多个客户端同时连接并保持连接?

[复制链接]
1130|5
 楼主| 598330983 发表于 2023-12-24 22:25 | 显示全部楼层 |阅读模式
在TCP协议中,服务端可以通过多线程、多进程或异步编程的方式来实现同时与多个客户端建立并保持连接。以下是一些常见的方法:

多线程:

为每个客户端连接创建一个新的线程。这样,每个连接都在独立的线程中处理,服务端能够同时处理多个连接。
在每个线程中,服务端可以与相应的客户端通信,接收和发送数据。
注意:在使用多线程时,需要考虑线程安全性和资源共享的问题。
多进程:

为每个客户端连接创建一个新的进程。这样,每个连接都在独立的进程中处理,服务端能够同时处理多个连接。
在每个进程中,服务端可以与相应的客户端通信,接收和发送数据。
注意:在使用多进程时,需要考虑进程间通信和资源共享的问题。
异步编程(例如使用异步I/O或事件驱动的模型):

使用异步编程模型,服务端可以通过非阻塞I/O操作来同时处理多个连接。
可以使用事件循环(event loop)或回调函数等机制,实现在单个线程中管理多个连接的操作。
常见的异步编程框架包括Twisted、Tornado和asyncio等。
下面是一个简单的Python示例,使用多线程来实现一个简单的TCP服务端同时处理多个客户端连接:
  1. import socket
  2. import threading

  3. def handle_client(client_socket):
  4.     while True:
  5.         data = client_socket.recv(1024)
  6.         if not data:
  7.             break
  8.         client_socket.send(data)

  9.     client_socket.close()

  10. def main():
  11.     server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  12.     server.bind(('0.0.0.0', 8888))
  13.     server.listen(5)

  14.     print('[INFO] Server listening on port 8888...')

  15.     while True:
  16.         client, addr = server.accept()
  17.         print(f'[INFO] Accepted connection from {addr[0]}:{addr[1]}')

  18.         client_handler = threading.Thread(target=handle_client, args=(client,))
  19.         client_handler.start()

  20. if __name__ == "__main__":
  21.     main()


单片小菜 发表于 2023-12-25 10:47 | 显示全部楼层
这个是长链接?从断开到连接上,需要多长时间?
OliviaSH 发表于 2023-12-27 18:51 来自手机 | 显示全部楼层
除了多线程还有其他方法吗?
亚瑟 发表于 2023-12-29 10:23 来自手机 | 显示全部楼层
OliviaSH 发表于 2023-12-27 18:51
除了多线程还有其他方法吗?

异步io也行
ynndmalh21 发表于 2023-12-29 12:17 | 显示全部楼层
多个线程还是好一些的。
真爱吴迪迪 发表于 2023-12-29 12:20 | 显示全部楼层
可以考虑一下多线程的模式。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

267

主题

5575

帖子

22

粉丝
快速回复 在线客服 返回列表 返回顶部