RPC over TCP 与同一台机器上的多个客户端

簇绒

我正在使用 msgpack 的 golang 构建一个 RPC 服务器。客户端是使用 mprpc 库(使用 gevent 通过 TCP 的 msgpack)在 python 中构建的。

我的问题是,作为网络领域的绝对菜鸟,我发现我不能在同一台计算机上同时运行多个客户端使用相同的地址/端口(我猜套接字已经绑定,它只是停顿和超时)。

我环顾四周,但我不确定我应该做什么才能让同一台机器上的多个客户端与服务器通信(来回 msgpack)。这是我需要使用 ZeroMQ 的情况吗?还是通过 HTTP 请求?

谢谢 !

阿巴纳特

TCP 是一种面向连接的协议。这意味着只有服务器需要有一个固定的、已知的端口。客户端可以使用它想要的任何端口,因为没有人与客户端建立连接。

那么,服务器如何知道如何与客户端通信呢?每当它接受一个连接时,它就会被告知该连接来自谁。但通常情况下,您甚至不需要它,因为套接字会跟踪连接来自谁。只需接收并发送该套接字,您就可以与正确的客户端交谈。


您可能应该阅读Python 文档中Socket Programming HOWTO或其他一些教程,但简要地...

服务器是这样启动的:

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind(('', 12345))
sock.listen(5)
while True:
    csock, addr = sock.accept()

bind是端口和listens 并围绕accepting 连接并用它们做一些事情。

另一方面,客户端只是这样做:

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('localhost', 12345))

……或者,等效地:

sock = socket.create_connection(('localhost', 12345))

它不调用bind,它只是创建一个连接,让套接字库在该连接的适当接口上选择一个任意端口。除非您已经打开了数千个套接字,否则它应该始终能够为您找到一个空闲端口。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

从Java到同一台机器的多个TCP连接延迟

如何在一台机器上设置多个Web客户端

TCP客户端可以使用同一端口连接另一台服务器吗?

在一台机器上模拟的服务器和客户端网络应用

文件I / O与TCP套接字,在同一台机器上进行数据传输的速度更快?

我们可以在同一台机器上彼此找出服务器/守护进程和客户端进程吗?

Java-用一台计算机测试两个TCP客户端

RPC无法解码TCP传输的参数

客户端向tcp服务器发送数据,tcp服务器向另一台服务器发送数据

通过TCP处理多个客户端

一台NettyServer的Avro RPC多个响应器

TCP | C#| 接受多个客户端并在同一端口上对其进行管理

Ruby-如何使用Ruby将文本字符串从TCP Server发送到另一台计算机上的客户端?

IPC在同一台机器上... WCF

debian和ubuntu在同一台机器上

NAO机器人中的Python TCP / IP客户端

我可以在同一台机器上同时运行多个 ansible 实例吗?

如何在同一台机器上运行多个 Apache Ignite 节点?

在同一台机器上创建多个Postgres实例

如何在同一台机器上运行多个硒测试套件

是否可以在同一台机器上启动多个docker守护程序

同一台机器上的 MassTransmit/RabbitMQ 多个不同的实例

在同一台机器上模拟多个路由器

是否可以在同一台机器上安装多个版本的 hyperledger composer?

TCP客户端退出

简单的TCP客户端

一台机器上的多个操作系统

调用Go RPC TCP服务时Ruby Socket Client挂起

通过TCP套接字Java实现双向JSON-RPC