【问题标题】:Writing a Socket.IO server in C++用 C++ 编写一个 Socket.IO 服务器
【发布时间】:2014-11-27 20:43:29
【问题描述】:

我想编写一个使用与 Socket.IO 相同的有线格式的 C++ 服务器。我找到了the gevent-socketio packet codec for the wire,但是找不到对应的客户端编解码器。

数据包编码如下:5:1+::{"name": "tobi"}

socket.io-protocol#Packet 似乎没有指定线路格式,并且标识符似乎与gevent-socketio 使用的标识符不匹配。

有确定的电汇格式吗?是否可以使用固定/已知的客户端库编写与 Socket.IO 兼容的服务器,也许对于某些固定版本的协议?

【问题讨论】:

  • 有趣的问题,这根本不是太宽泛(因为有些人已经投票结束),因为应该有一个基于事实的答案。我也很好奇,但我自己也找不到真正的线上格式。我认为这有点因为 socket.io 在其他一些协议(http 长轮询、websocket 等)之上运行,所以实际格式有点复杂。但是,当然应该可以找到 socket.io 格式,尽管我在自己的搜索中没有找到它。它必须在某个地方。
  • 我对 C++ 服务器 API 非常感兴趣,最好是基于 boost
  • 这可能是也可能不是答案,但我建议改用 WebSocket 协议。
  • 还有这个项目声称是服务器,而不是客户端。它看起来有点旧/未开发,但可能有一些有用的代码:github.com/pnxs/socket.io-serverpp

标签: c++ node.js socket.io


【解决方案1】:

** API的基本概述可以在这里看到 **

API 类似于 JS 客户端。 连接到服务器

sio::client h;
h.connect("http://127.0.0.1:3000");

发出一个事件

// 仅发出事件名称:

h.socket()->emit("login");

// 发出文本

h.socket()->emit("add user", username);

// 发出二进制文件

char buf[100];
h.socket()->emit("add user", std::make_shared(buf,100));

// 使用 lambda ack 处理程序发出消息对象

h.socket()->emit("add user", string_message::create(username), [&](message::list const& msg) {
});

// 发出多个参数

message::list li("sports");
li.push(string_message::create("economics"));
socket->emit("categories", li);

message::list 中的项目将在服务器端事件回调中展开 函数作为函数参数。绑定事件 绑定函数 指针

void OnMessage(sio::event &)
{

}
h.socket()->on("new message", &OnMessage);

Bind with lambda

h.socket()->on("login", [&](sio::event& ev)
{
    //handle login message
    //post to UI thread if any UI updating.
});

与成员函数绑定

class MessageHandler
{
public:
    void OnMessage(sio::event &);
};
MessageHandler mh;
h.socket()->on("new message",std::bind( &MessageHandler::OnMessage,&mh,std::placeholders::_1));

使用命名空间

h.socket("/chat")->emit("add user", username);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-22
    • 1970-01-01
    • 1970-01-01
    • 2010-10-31
    • 1970-01-01
    相关资源
    最近更新 更多