我是socket.io和node.js的新手,我引用了一些在线文档并创建了一个套接字服务器,它工作正常,但现在它显示了很多错误,因为我不知道socket.io和node.js,所以我无法纠正问题。
我在服务器端收到以下错误
/home/sitename/public_html/chat-server/node_modules/socket.io/lib/namespace.js:119 fns[i](socket, function(err){ ^ TypeError: Property '0' of object [object Object] is not a function at run (/home/sitename/public_html/chat-server/node_modules/socket.io/lib/namespace.js:119:11) at Namespace.run (/home/sitename/public_html/chat-server/node_modules/socket.io/lib/namespace.js:131:3) at Namespace.add (/home/sitename/public_html/chat-server/node_modules/socket.io/lib/namespace.js:160:8) at Client.connect (/home/sitename/public_html/chat-server/node_modules/socket.io/lib/client.js:76:20) at Server.onconnection (/home/sitename/public_html/chat-server/node_modules/socket.io/lib/index.js:367:10) at Server.EventEmitter.emit (events.js:95:17) at Server.handshake (/home/sitename/public_html/chat-server/node_modules/engine.io/lib/server.js:310:8) at Server.onWebSocket (/home/sitename/public_html/chat-server/node_modules/engine.io/lib/server.js:392:10) at /home/sitename/public_html/chat-server/node_modules/engine.io/lib/server.js:335:12 at completeHybiUpgrade2 (/home/sitename/public_html/chat-server/node_modules/ws/lib/WebSocketServer.js:284:5)
在客户端我收到以下错误
GET https://sitename/socket.io/?EIO=3&transport=polling&t=1483766845342-50
和
WebSocket connection to 'wss://sitename:3000/socket.io/?EIO=3&transport=websocket' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED
客户端代码
<script src="https://cdn.socket.io/socket.io-1.3.2.js"></script>
var socket = io();
var socket = io.connect( 'https://sitename:3000',{secure: true,
'sync disconnect on unload': true,'reconnect': true,
'reconnection delay': 500, rejectUnauthorized: false , transports: [
'websocket',
'flashsocket',
'htmlfile',
'xhr-polling',
'jsonp-polling',
'polling'
]} );
服务器端代码
var fs = require('fs');
var app = require('express')();
var https = require('https');
var options = {
key: fs.readFileSync('./privatekey.pem'),
cert: fs.readFileSync('./certificate.crt')
};
var server = https.createServer(options, app);
//var io = require('socket.io')(server);
var io = require('socket.io').listen(server);
var socket = io.use({
transports: [
'websocket',
'flashsocket',
'htmlfile',
'xhr-polling',
'jsonp-polling',
'polling'
]
});
var clients=[];
var gamename={};
var socketid={};
app.use(function (req, res, next) {
// Website you wish to allow to connect
res.setHeader('Access-Control-Allow-Origin', 'https://sitename:3000');
// Request methods you wish to allow
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
// Request headers you wish to allow
res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');
// Set to true if you need the website to include cookies in the requests sent
// to the API (e.g. in case you use sessions)
res.setHeader('Access-Control-Allow-Credentials', true);
// Pass to next layer of middleware
next();
});
app.get('/', function(req, res){
res.sendfile('index.html');
});
io.on('connection', function(socket){
});
server.listen(3000, function(){
console.log('It is Listening on *:3000');
});
最佳答案
在我看来,您可能指定了无效的传输,这会导致 socket.io 出错(我无法识别 htmlfile
和 polling
等传输名称)。
您知道是否属于这种情况的方法是从客户端和服务器完全删除所有传输,这样您甚至不需要指定该选项。然后你将只有默认的内置传输(应该只是 websocket 和 xhr-polling)。
您只能指定您支持且实际需要的传输。您不能只编造传输名称。
关于javascript - fns[i](套接字,函数(错误){ TypeError : Property '0' of object [object Object] is not a function in/socket. io/lib/namespace.js:119,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41518162/