最近一直在研究一个项目(预计不久以后就会上线),由于存在客户端长链接播报信息的情况,因此我便开始了解websocket。但在开发的过程中,遇到了一个相当离谱的问题:服务端死活无法发送消息给客户端。使用的是socketio库,原本以为这只是个很常见的bug,却发现连续好几天换了各种办法也无法解决。
具体情况如下:
![2NA)G`@Q9@J$]1%DZA]XW1P.png]1
原计划是当客户端注册成功后,服务端返回一个token给客户端,同时绑定本次token对应的sid。当有新的消息时,服务端将根据token查找sid,并推送消息。
听起来很容易是吧?但问题便出在这里:无论用何种方法记录sid,都无法正确推送消息,客户端毫无反应。在我试过各种解决方案后,我不得不放弃继续折磨自己,将问题甩向v2ex,希望有大佬能帮忙解决才不是因为偷懒。
然而,就在今天,希望出现了:有某个大佬直接给出了解决代码。总算解决了问题,我便开始研究思路。简单看了一眼,发现我犯了一个非常大的错误:我从服务端获取的sid是服务端的,我必须要先从客户端获取sid,把sid传给服务端,才能让服务端定位客户端并发送消息。
虽然是个低级错误,不过无论如何困扰了几天的问题总算解决了,又能愉快写bug了。只能说还是v友厉害,不过看起来我的代码水平还有待提高,不然下次说不定就没有那么幸运能遇到愿意帮忙的人了。
2022.7.14