websocket onopen onmessage opclose 回调函数,增加用户数据void*
websocket服务端,三个回调函数,都增加第三个参数:用户数据
这样,我初始化server.registerWebSocketService(&ws);的时候,就可以把所谓的上下文添加到回调函数中,回调函数返回时,直接返回对应的用户数据,也就是上下文
同理,客户端也是
另外,咨询一下,websocket 客户端,这个headers["Origin"] 是什么意思,headers["Origin"] = "http://example.com/"; 我不填或者写个其他,可以吗?
std::function可以bind任意的参数,所以不必要像纯c回调函数一样需要添加userdata,你可以使用ws.onopen = [userdata](...)去捕获参数列表
headers["Origin"]这个头部可以设置成自己的域名,如果服务端不验证这个头部字段,你也可以不填
std::function可以bind任意的参数,所以不必要像纯c回调函数一样需要添加userdata,你可以使用
ws.onopen = [userdata](...)去捕获参数列表
你说的绑定怎么绑定? auto ctx = channel->newContextPtr<MyContext>(); 这样?
只所以要做用户数据,是因为我一开始设置回调函数时,我就设置了用户数据,您example里面的绑定上下文已经是onopen回调函数里面,来给channel绑定上下文,并且绑定一般都是绑定创建他或者他本身的类指针:
已经到了回调函数里面了,再去绑定,那类指针都找不到了,并且并非要像websocket_server_test.cpp里面,已经到了onopen回调函数了,再去创建一个类指针,给它做绑定,要绑定的是原始或者回调函数本身拥有者的类指针
headers["Origin"]这个头部可以设置成自己的域名,如果服务端不验证这个头部字段,你也可以不填
那在服务器里面,怎么获取到这个字段,我看websocket_server_test.cpp里面,没有相关的验证这个头的东西?
建议你先学习下c++11 lambda函数吧,lambda可以捕获任何参数,包括this指针,这里有示例代码 https://github.com/ithewei/libhv/blob/dd2bb958f9ef41265c66c27d3ff499993a634812/examples/websocket_client_test.cpp#L24
headers["Origin"]这个头部可以设置成自己的域名,如果服务端不验证这个头部字段,你也可以不填
那在服务器里面,怎么获取到这个字段,我看websocket_server_test.cpp里面,没有相关的验证这个头的东西?
可以通过req->headers["Origin"]获取这个字端,websocket_server_test.cpp并没有去验证,一些三方的websocket服务可能会验证,如果不验证,你不设置就好了
建议你先学习下c++11 lambda函数吧,lambda可以捕获任何参数,包括this指针,这里有示例代码
https://github.com/ithewei/libhv/blob/dd2bb958f9ef41265c66c27d3ff499993a634812/examples/websocket_client_test.cpp#L24
好的。懂了,谢谢。