当前位置: 首页 > 知识库问答 >
问题:

尝试使用socket.io时出错

彭高畅
2023-03-14
 let socket = SocketIOClient(socketURL: URL(string: "http://example.com:4000")!, config: [.log(true), .forcePolling(true)]);
        socket.connect();
        socket.on("connect") {data, ack in
            print("socket is connected");
            socket.emit("getData", ["data": 3]);
        }
var express = require('express');
var app = express();
var http = require('http').Server(app);
var io = require('socket.io')(http);

io.on('connection', function(socket){
    console.log('a user connected');
    socket.on('disconnect', function(){
        console.log('user disconnected');
    });
    socket.on('getData', function(result){
        console.log(result);
    });
});


app.listen(4000, function () {
  console.log(' on at 4000!');
});

...在Xcode控制台,我得到

2016-09-29 16:38:33.871895 proj[3070:1019256] LOG SocketEngine: Handshaking
2016-09-29 16:38:33.872301 proj[3070:1019256] LOG SocketEnginePolling: Doing polling request
2016-09-29 16:38:34.004312 proj[3070:1019256] LOG SocketEnginePolling: Got polling response
2016-09-29 16:38:34.004874 proj[3070:1019283] LOG SocketEngine: Got message: Cannot GET /socket.io/?transport=polling&b64=1
2016-09-29 16:38:34.005283 proj[3070:1019283] ERROR SocketIOClient: Got unknown error from server Cannot GET /socket.io/?transport=polling&b64=1

它演示了建立了连接并成功找到了服务器,但其他问题出现了。会很感激你的帮助。

共有1个答案

尹欣怿
2023-03-14

(旁白:如果您不需要对旧浏览器(或任何浏览器的支持,因为您的客户端是原生移动应用程序)的支持,那么您可以考虑使用WebSocket,这是一个开放标准。Socket.io通常用于在不支持WebSocket的浏览器上具有类似WebSocket的功能。另一方面,WebSocket是一个开放标准,具有广泛的支持(不仅在浏览器中),而且性能更好。更多细节请参见此答案。)

现在,既然您已经在使用socket.io,那么下面是如何诊断问题。我会尝试从浏览器连接,这是使用socket.io连接的主要方式,看看是否有效。如果没有,则意味着服务器代码有问题。如果是这样,那么这可能意味着你的客户有问题。这将是第一件要检查的事情。从那里开始,你可以缩小问题的范围,并希望解决它。

如果您希望从使用socket.io的工作代码开始,包括服务器端(node.js)和客户端(浏览器中的JavaScript),那么您可以看到我最初为这个答案编写的示例,这些示例可以在GitHub和NPM上获得:

使用Express.js的Socket.io服务器示例:

var path = require('path');
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
app.get('/', (req, res) => {
  console.error('express connection');
  res.sendFile(path.join(__dirname, 'si.html'));
});
io.on('connection', s => {
  console.error('socket.io connection');
  for (var t = 0; t < 3; t++)
    setTimeout(() => s.emit('message', 'message from server'), 1000*t);
});
http.listen(3002, () => console.error('listening on http://localhost:3002/'));
console.error('socket.io example');

来源:https://github.com/rsp/node-websocket-vs-socket.io/blob/master/si.js

使用vanilla JavaScript的Socket.io客户机示例:

var l = document.getElementById('l');
var log = function (m) {
    var i = document.createElement('li');
    i.innerText = new Date().toISOString()+' '+m;
    l.appendChild(i);
}
log('opening socket.io connection');
var s = io();
s.on('connect_error', function (m) { log("error"); });
s.on('connect', function (m) { log("socket.io connection open"); });
s.on('message', function (m) { log(m); });
var path = require('path');
var app = require('express')();
var ws = require('express-ws')(app);
app.get('/', (req, res) => {
  console.error('express connection');
  res.sendFile(path.join(__dirname, 'ws.html'));
});
app.ws('/', (s, req) => {
  console.error('websocket connection');
  for (var t = 0; t < 3; t++)
    setTimeout(() => s.send('message from server', ()=>{}), 1000*t);
});
app.listen(3001, () => console.error('listening on http://localhost:3001/'));
console.error('websocket example');

来源:https://github.com/rsp/node-websocket-vs-socket.io/blob/master/ws.js

使用vanilla JavaScript的WebSocket客户端示例:

var l = document.getElementById('l');
var log = function (m) {
    var i = document.createElement('li');
    i.innerText = new Date().toISOString()+' '+m;
    l.appendChild(i);
}
log('opening websocket connection');
var s = new WebSocket('ws://'+window.location.host+'/');
s.addEventListener('error', function (m) { log("error"); });
s.addEventListener('open', function (m) { log("websocket connection open"); });
s.addEventListener('message', function (m) { log(m.data); });

来源:https://github.com/rsp/node-websocket-vs-socket.io/blob/master/ws.html

 类似资料:
  • 我试图在命令shell上使用安装,但出现以下错误: 使用缓存收集rpy2https://files.pythonhosted.org/packages/c7/43/401afad8556bf92b08bd7d422cacac614b0e8dd2bce31848318bbcb18f48/rpy2-3.0.5.tar.gz错误:从命令python安装程序完成输出。py egg_info:ERROR:T

  • 但我不知道该怎么做。我正在使用maven来获取依赖项。它是否与Apache HttpComponents的版本有关? 下面是pom.xml

  • 我正在阅读有关C中线程的教程并测试了以下代码: 我试图使用gcc和g编译此代码,但我总是遇到编译错误。 使用gcc-pthread thread_test.c: /tmp/ccmpQLyp。o: 在函数std::cout'thread_test.cpp: 你能帮忙吗?我必须做些什么才能让这段代码在Linux和Windows上运行吗?

  • 我有几个项目保存到documents目录。我目前需要这些以编程方式移动到另一个目录。我成功地创建了新目录,但在使用FileManager.Default.MoveItem时似乎并没有看到这一点。 用于创建目录的代码。 我用这个代码检查我的URL。 它输出这个。 无法将文件移动到新媒体路径错误-错误域=nscocoaErrorDomain代码=516“无法将Image_5移动到”Documents“

  • 错误:/io/opencv/modules/highgui/src/window。cpp:583:错误:(-2)未实现该函数。使用Windows、GTK 2重建库。x或碳载体。如果您使用的是Ubuntu或Debian,请安装libgtk2。0-dev和pkg config,然后在函数cvShowImage中重新运行cmake或配置脚本

  • 下面是我的代码: 在从Eclipse IDE运行类时,得到以下错误: