处理 socket.io 客户端的 PHP/C++ 服务器

Posted

技术标签:

【中文标题】处理 socket.io 客户端的 PHP/C++ 服务器【英文标题】:PHP/C++ server to handle socket.io clients 【发布时间】:2013-08-06 16:32:30 【问题描述】:

有一个网站使用 socket.io 作为它的“API”。本质上,任何人都可以下载网站的源代码并对其进行修改以轻松制作自己的客户端。例如,我有六个客户端,它们都运行相同的自定义客户端脚本。该脚本托管在我自己的域中,而不是使用 socket.io API 的域。

我希望能够跟踪谁已连接,并保留总的某些数据。例如,如果每个单独的客户端有 0.5 余额,我希望他们能够知道总数是 3,因为服务器。

我能想到的最明显的方法是结合 AJAX 和调用 mysql 来跟踪事物,但这似乎是冗长的。

我也可以做 CURL,但这在技术上很有挑战性。

是否有一种简单直接的方法可以简单地汇总来自六个不同 socket.io 客户端的余额并将信息发送回它们?

【问题讨论】:

恐怕最直接的方法就是在Node.js中做。有其他语言的 Socket.IO 客户端,但它们有时落后并且并不总是实现完整的协议。 Socket.IO 为自己的协议使用了一堆“传输”。从 AJAX 到 Websocket 的一切。您只需要一个传输即可进行通信,但这不是一项小任务。 Using php with Socket.io 的可能重复项 您可能想查看React。这是一个用于处理 websocket 的 PHP 库。我还没有玩过它,但它看起来很有前途,而且我听到了很棒的东西。 【参考方案1】:

在您的 PHP 后端使用对象缓存层(如 APC 或 memcached)作为共享内存。 这样,您可以保持不同实例/客户端之间的同步。

请记住,您必须实现一些多处理安全性,因为这不是线程安全的。

例如:

/* PHP application 1: */
(($value = apc_fetch("IncrementValue")) != FALSE) ? apc_store("IncrementValue",$value+1) : apc_store("IncrementValue",1);

然后其他人可以像这样访问它:

echo apc_fetch("IncrementValue");

这是一种在会话之间进行通信的快速但粗略的方式。

【讨论】:

以上是关于处理 socket.io 客户端的 PHP/C++ 服务器的主要内容,如果未能解决你的问题,请参考以下文章

如何在客户端中获取 socket.io 客户端的会话 ID

socket.io 在空闲时断开客户端的连接

在 socket.io 中控制来自客户端的心跳超时

如何更新房间内所有客户端的套接字对象? (socket.io)

基于socket.io客户端与服务端的相互通讯

使用 socket.io 流式传输网络摄像头