Socket.IO C++基于Boost和WebSocket++,可在多平台上工作(跨平台)。此通信类似于websocket,但是不通用于websocket。
Sockect.io 与Websocket的区别我在知乎上看到说明两者的区别,感觉比较详细
WebSocket和Socket.io之间的区别(译) - 知乎 (zhihu.com)
Sockect.IO编译Socket.IO-Client-cpp编译——C++_十年之少的博客-CSDN博客
代码说明我是比照着 官方的给的示例(socket.io-client-cpp-master/examples/QT/SioChatDemo)进行学习的,官方的示例说明网址是Socket.IO C++ | Socket.IO。
在.h文件上设置命名空间:
using namespace sio;
初始化:获取套接字(socket),可获取含有命名的套件字,具体看需求;
监听套接字的一些事件,如新消息、用户加入、用户离开等;
监听客户端的一些事件,如客户端的关闭连接等;
#ifdef WIN32
#define BIND_EVENT(IO,EV,FN)
do{
socket::event_listener_aux l = FN;
IO->on(EV,l);
} while(0)
#else
#define BIND_EVENT(IO,EV,FN)
IO->on(EV,FN)
#endif
_io=new client();
using std::placeholders::_1;
using std::placeholders::_2;
using std::placeholders::_3;
using std::placeholders::_4;
socket::ptr sock = _io->socket();
BIND_EVENT(sock,"new message",std::bind(&MainWindow::OnNewMessage,this,_1,_2,_3,_4));
BIND_EVENT(sock,"user joined",std::bind(&MainWindow::OnUserJoined,this,_1,_2,_3,_4));
BIND_EVENT(sock,"user left",std::bind(&MainWindow::OnUserLeft,this,_1,_2,_3,_4));
BIND_EVENT(sock,"typing",std::bind(&MainWindow::OnTyping,this,_1,_2,_3,_4));
BIND_EVENT(sock,"stop typing",std::bind(&MainWindow::OnStopTyping,this,_1,_2,_3,_4));
BIND_EVENT(sock,"login",std::bind(&MainWindow::OnLogin,this,_1,_2,_3,_4));
_io->set_socket_open_listener(std::bind(&MainWindow::OnConnected,this,std::placeholders::_1));
_io->set_close_listener(std::bind(&MainWindow::OnClosed,this,_1));
_io->set_fail_listener(std::bind(&MainWindow::OnFailed,this));
connect(this,SIGNAL(RequestAddListItem(QListWidgetItem*)),this,SLOT(AddListItem(QListWidgetItem*)));
connect(this,SIGNAL(RequestRemoveListItem(QListWidgetItem*)),this,SLOT(RemoveListItem(QListWidgetItem*)));
connect(this,SIGNAL(RequestToggleInputs(bool)),this,SLOT(ToggleInputs(bool)));
创建连接:
#define kURL "http://localhost:3000" _io->connect(kURL);
事件响应:各个事件响应不再每个说了,没什么难度。
运行程序要想玩转示例程序,还需要注意各方努力:
客户端:
1>检查pro文件:在运行前 需要检查SioChatDemo.pro文件所配置的动态库位置;
2>确认填写的服务器的地址;
服务器:
1>下载服务器代码:https://github.com/Automattic/socket.io/tree/master/examples/chat
2>按照命令运行服务器:
$ npm i $ npm start
当命令行出现:Server listening at port 3000,表示运行成功。
效果图 结束语此次学习Socket.IO真是有点费劲,虽然代码看着挺清楚,但是环境这块真的费大劲了:编译客户端库、编译Boost、下载服务器代码及运行,其中的弯路不必说。



