transport 应该是polling 还是websocket
38602629 opened this issue · comments
遇到了什么问题?
我后端是用flask socketIO写的,通过iOS程序已经调试通过,下面的请求日志是iOS程序正常发起的
`127.0.0.1 - - [03/Sep/2020 19:55:40] "GET /socket.io/?EIO=3&transport=websocket HTTP/1.1" 400 122 0.000600
(12970) accepted ('127.0.0.1', 56788)
127.0.0.1 - - [03/Sep/2020 19:55:44] "GET /socket.io/?transport=polling&b64=1&uuid=74CE6F1A503AA7E0961B21B1EBFAF592&token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJrb3VzdWFuIiwic3ViIjoiUVotNzRDRTZGMUE1MDNBQTdFMDk2MUIyMUIxRUJGQUY1OTItRDYifQ.5EkFBYsfiPfuK3_Nb65TX_64RsTo2HIZf10roESMcBA HTTP/1.1" 200 348 0.001828
(12970) accepted ('127.0.0.1', 56789)
127.0.0.1 - - [03/Sep/2020 19:55:44] "GET /socket.io/?transport=websocket&uuid=74CE6F1A503AA7E0961B21B1EBFAF592&token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJrb3VzdWFuIiwic3ViIjoiUVotNzRDRTZGMUE1MDNBQTdFMDk2MUIyMUIxRUJGQUY1OTItRDYifQ.5EkFBYsfiPfuK3_Nb65TX_64RsTo2HIZf10roESMcBA&sid=e876a9668b504af68fb9c675b0488a90 HTTP/1.1" 400 122 0.000261
(12970) accepted ('127.0.0.1', 56790)
127.0.0.1 - - [03/Sep/2020 19:55:44] "POST /socket.io/?transport=polling&b64=1&uuid=74CE6F1A503AA7E0961B21B1EBFAF592&token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJrb3VzdWFuIiwic3ViIjoiUVotNzRDRTZGMUE1MDNBQTdFMDk2MUIyMUIxRUJGQUY1OTItRDYifQ.5EkFBYsfiPfuK3_Nb65TX_64RsTo2HIZf10roESMcBA&sid=e876a9668b504af68fb9c675b0488a90 HTTP/1.1" 200 167 0.000396`
而小程序发起的请求永远都是如下
127.0.0.1 - - [03/Sep/2020 20:57:48] "GET /socket.io/?uuid=74CE6F1A503AA7E0961B21B1EBFAF592&token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJrb3VzdWFuIiwic3ViIjoiUVotNzRDRTZGMUE1MDNBQTdFMDk2MUIyMUIxRUJGQUY1OTItRDYifQ.5EkFBYsfiPfuK3_Nb65TX_64RsTo2HIZf10roESMcBA&EIO=3&transport=websocket HTTP/1.1" 400 122 0.000536
其中我发现transport不一致,其他都保持了统一。
你的预期是什么?
我希望小程序发起的请求和iOS一样,是不是就可以正常连接上服务器了呢?我是在模拟器运行的,而不是真机。
服务器端namespace 是kousuan ,我小程序的代码如下:
`
const io = require('../../../utils/weapp.socket.io.dev') //加载js文件
const socket = io('ws://localhost:5000/kousuan',{
// path: '/socket.io',
// transports: ['websocket'],
query: {
uuid: '74CE6F1A503AA7E0961B21B1EBFAF592',
token: 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJrb3VzdWFuIiwic3ViIjoiUVotNzRDRTZGMUE1MDNBQTdFMDk2MUIyMUIxRUJGQUY1OTItRDYifQ.5EkFBYsfiPfuK3_Nb65TX_64RsTo2HIZf10roESMcBA'
}
}) //链接域名
socket.on('connect', () => {
console.log(socket.connected); // true
console.log(socket.id); // 'G5p5...'
});
`
截图:
项目版本号:�
- Version [e.g. 22]
微信开发者工具
- 版本号:[e.g. 22]
- 电脑 OS:[e.g. Windows 10]
真机环境 (请完成填充下面的条码):
- Device: [e.g. iPhone6]
- OS 版本: [e.g. iOS8.1]
- 微信版本 [e.g. 22]
附加信息:
会不会是localhost的问题
问题解决了,原因是这个库不支持polling模式,只支持websocket模式,所以需要后端服务支持websocket模式,iOS的socketIO库是支持polling模式和websocket模式的,Android目前不知道,总而言之,需要后端提供支持websocket模式即可,要不然就通不了