不同的Server程序实例间如何通信

有2种方法可以实现不同的Server程序实例间通信。

额外监听一个UDP端口

  • 额外监听一个UDP端口并设置onPacket回调,接收来自其他Server发来的消息
  • UDP通信不是可靠的,消息可能会丢失。需要应用层发送消息接收回执
  • UDP通信不存在阻塞IO

使用swoole_client作为客户端访问Server

Server程序中创建一个TCP客户端,连接到另外一个Server程序。实现ServerServer之间通信。TCP客户端需要实现对端Server约定的通信协议。可使用Server::getClientInfo得到客户端连接的来源IP实现安全防护机制。

  • TCP通信时可靠的可以保证安全性
  • 创建TCP客户端连接是推荐的做法,异步Server中创建一个异步的TCP客户端可以保证整个Server程序是纯异步的


  • zoro

    swoole_server和swoole_websocket_server之间如何实现通信呢,没有类似swoole_websocket_client的客户端来访问swoole_websocket_server啊,如果使用swoole_client作为客户端的话,握手也很麻烦。怎么破

  • 秦宏全

    我也在想这个问题呢

  • Sun_翁航

    有,实例代码中有给出

  • 刘锋

    你好,在server中创建客户端有例子吗?在哪里呢?谢谢! 我创建swoole_client之后,再创建server报错了 HP Fatal error: swoole_server::__construct(): eventLoop has been created. Unable to create swoole_server.

  • Rango-韩天峰

    应当先创建Server,等待onWorkerStart事件发生后再创建Client

  • 月半文一刀

    第二种方法方法成功了,但是swoole_server和websocket_server是分开单独启动的,不知道能不能放一起

  • 没事偷着乐

    @月半文一刀 您是怎么做的?有代码可以参考下吗?

  • water

    两个server通信只能采用这两种吗,处理起来很麻烦啊,有没有进程间通信的方法?

  • yichen

    swoole_client 创建长连接swoole_server 无法使用多核处理器?cpu 一直在一个核里