如何使用Rachet在一台机器上创建多个服务器

时间:2016-10-09 13:17:29

标签: php sockets tcp reactphp

情况是我使用像这样的shell脚本启动Rachet套接字服务器

$webSocketServer = new WsServer(new Chat());
$originCheck = new OriginCheck($webSocketServer, ['xdomain.com']);

$server = IoServer::factory(
    new HttpServer($originCheck), 8080);
$server->run();

我已经有一个使用AngularJs Websocket服务的客户端构建。 直到现在还好。

问题 截至目前,您可以看到我只是在端口8080上运行此服务器的终端中手动运行此脚本。

但我想要实现的是创建一个用户生成的聊天室。

从某种意义上说,当用户访问xdomain.com时。他可以选择创建聊天室。他点击按钮,它将点击我的服务器。我的服务器应该为该用户创建一个新的套接字服务器并给他一个密码/链接。用户将此代码发送给他的朋友。

当他们的朋友访问xdomain.com时,他们会看到两个选项

1 - 加入房间(他们必须提供他们从朋友那里得到的代码) 2 - 创建一个聊天室(这将按照我上面描述的相同方式运行)

现在我不确定这个架构。是好/坏/可能/不可能。

一个Rachet套接字服务器能够处理多少个连接?

对于创建聊天室的每个请求,我的脚本将在新的可用随机端口上创建一个新的Rachet套接字服务器。让我们假设这个站点变得非常流行,我的vps能否在不同的端口上打开这么多套接字服务器?我有这么多可用的端口吗?

此外,

在一个聊天室(Socker Server)上,用户是否能够传输Socket服务器可以接收的媒体文件或其正文消息?

由于

1 个答案:

答案 0 :(得分:1)

为新房间创建套接字服务器 - 这是个坏主意。 首先,文件描述符的最大端口数是65535 +限制(cat / proc / sys / fs / file-max)

套接字服务器可以保持很多连接(例如我的socket-server可以保持正常的12000日)

我的意见:

  1. 创建套接字服务器(如果需要多个连接,可以创建2-3个套接字服务器)
  2. 创建平衡器(它可以返回客户端的socker-server端口)
  3. 安装ZMQ
  4. 从ZMQ接收新消息并推送到客户端。
  5. 客户端正在写消息,此消息正在推送到ZMQ,而socket-server正在接收消息并将其推送到客户端。
  6. 如果您需要推送文件 - 在http服务器上推送它,并在ZMQ中写下有关这些文件的信息