libhv icon indicating copy to clipboard operation
libhv copied to clipboard

websocket onopen onmessage opclose 回调函数,增加用户数据void*

Open xinsuinizhuan opened this issue 1 year ago • 9 comments

websocket服务端,三个回调函数,都增加第三个参数:用户数据 图片

图片

这样,我初始化server.registerWebSocketService(&ws);的时候,就可以把所谓的上下文添加到回调函数中,回调函数返回时,直接返回对应的用户数据,也就是上下文

同理,客户端也是

xinsuinizhuan avatar May 08 '24 09:05 xinsuinizhuan

另外,咨询一下,websocket 客户端,这个headers["Origin"] 是什么意思,headers["Origin"] = "http://example.com/"; 我不填或者写个其他,可以吗?

xinsuinizhuan avatar May 08 '24 09:05 xinsuinizhuan

std::function可以bind任意的参数,所以不必要像纯c回调函数一样需要添加userdata,你可以使用ws.onopen = [userdata](...)去捕获参数列表

ithewei avatar May 08 '24 13:05 ithewei

headers["Origin"]这个头部可以设置成自己的域名,如果服务端不验证这个头部字段,你也可以不填

ithewei avatar May 08 '24 13:05 ithewei

std::function可以bind任意的参数,所以不必要像纯c回调函数一样需要添加userdata,你可以使用ws.onopen = [userdata](...)去捕获参数列表

你说的绑定怎么绑定? auto ctx = channel->newContextPtr<MyContext>(); 这样?

xinsuinizhuan avatar May 09 '24 00:05 xinsuinizhuan

只所以要做用户数据,是因为我一开始设置回调函数时,我就设置了用户数据,您example里面的绑定上下文已经是onopen回调函数里面,来给channel绑定上下文,并且绑定一般都是绑定创建他或者他本身的类指针: 图片

已经到了回调函数里面了,再去绑定,那类指针都找不到了,并且并非要像websocket_server_test.cpp里面,已经到了onopen回调函数了,再去创建一个类指针,给它做绑定,要绑定的是原始或者回调函数本身拥有者的类指针

xinsuinizhuan avatar May 09 '24 00:05 xinsuinizhuan

headers["Origin"]这个头部可以设置成自己的域名,如果服务端不验证这个头部字段,你也可以不填

那在服务器里面,怎么获取到这个字段,我看websocket_server_test.cpp里面,没有相关的验证这个头的东西?

xinsuinizhuan avatar May 09 '24 00:05 xinsuinizhuan

建议你先学习下c++11 lambda函数吧,lambda可以捕获任何参数,包括this指针,这里有示例代码 https://github.com/ithewei/libhv/blob/dd2bb958f9ef41265c66c27d3ff499993a634812/examples/websocket_client_test.cpp#L24

ithewei avatar May 09 '24 03:05 ithewei

headers["Origin"]这个头部可以设置成自己的域名,如果服务端不验证这个头部字段,你也可以不填

那在服务器里面,怎么获取到这个字段,我看websocket_server_test.cpp里面,没有相关的验证这个头的东西?

可以通过req->headers["Origin"]获取这个字端,websocket_server_test.cpp并没有去验证,一些三方的websocket服务可能会验证,如果不验证,你不设置就好了

ithewei avatar May 09 '24 03:05 ithewei

建议你先学习下c++11 lambda函数吧,lambda可以捕获任何参数,包括this指针,这里有示例代码

https://github.com/ithewei/libhv/blob/dd2bb958f9ef41265c66c27d3ff499993a634812/examples/websocket_client_test.cpp#L24

好的。懂了,谢谢。

xinsuinizhuan avatar May 09 '24 05:05 xinsuinizhuan