socket.io 客户端到服务器混淆
socket.io client to server confusion
我正在尝试创建一个简单的 IRC 以了解它是如何工作的。我已经设置了一个本地节点服务器和另一个连接到本地主机的工作区,他们说得很好。但是,当我将本地服务器推送到 Openshift 并尝试使用客户端连接到它时;
var socket = io.connect("http://irc-abc.rhcloud.com:3000");
未连接。
我在这里做错了什么,或者我怎样才能使这项工作正常进行?
注意:我是 websockets 的新手,我正在尝试理解它们,我可能错过了大局。
是的,我确实在 Whosebug 上发现了很多类似的问题,但是它对我没有帮助,正如我所说的,我对 websockets 还很陌生,理解起来有些困难。
服务器
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var ip = process.env.OPENSHIFT_NODEJS_IP || '127.0.0.1';
var port = process.env.OPENSHIFT_NODEJS_PORT || 3000;
// TO-DO verify creds against db
var credentials = {
'username' : ''
};
io.on('connection', function(socket){
// verify if client has username
socket.on('login', function(credentials){
if(credentials.username) {
this.username = credentials.username;
console.log( this.username + ' connected');
io.emit('notice', this.username + ' connected');
}
else {
console.log( 'USER GOT DENIED' );
socket.disconnect();
}
// when message received
socket.on('chat message', function (msg) {
var message = this.username + ': ' + msg;
io.emit('chat message', message);
});
});
// when user disconnects
socket.on('disconnect', function(){
console.log( this.username + ' disconnected');
});
});
http.listen(port, ip);
console.log('listening on ' + ip + ':' + port);
客户
var socket = io.connect("irc-abc.rhcloud.com:3000");
var username = '<?php if(isset($_SESSION['username'])) echo $_SESSION['username'];
else echo 'guest'; ?>';
var credentials = {
'username' : username
};
socket.emit('login', credentials);
$('form').submit(function() {
if ($('#m').val()) {
socket.emit('chat message', $('#m').val());
$('#m').val('');
}
window.scrollTo(0,document.body.scrollHeight);
return false;
});
socket.on('chat message', function(msg){
$('#messages').append($('<li>').text(msg));
window.scrollTo(0,document.body.scrollHeight);
});
socket.on('notice', function(notice){
$('#messages').append($('<li>').text(notice));
window.scrollTo(0,document.body.scrollHeight);
});
我要做的第一件事是检查端口 3000 是否有防火墙。一些(大多数)主机防火墙所有不常用的端口(80、443 等)。如果您不能让他们立即更改防火墙,请使用端口 80 进行测试。
我正在尝试创建一个简单的 IRC 以了解它是如何工作的。我已经设置了一个本地节点服务器和另一个连接到本地主机的工作区,他们说得很好。但是,当我将本地服务器推送到 Openshift 并尝试使用客户端连接到它时;
var socket = io.connect("http://irc-abc.rhcloud.com:3000");
未连接。
我在这里做错了什么,或者我怎样才能使这项工作正常进行?
注意:我是 websockets 的新手,我正在尝试理解它们,我可能错过了大局。
是的,我确实在 Whosebug 上发现了很多类似的问题,但是它对我没有帮助,正如我所说的,我对 websockets 还很陌生,理解起来有些困难。
服务器
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var ip = process.env.OPENSHIFT_NODEJS_IP || '127.0.0.1';
var port = process.env.OPENSHIFT_NODEJS_PORT || 3000;
// TO-DO verify creds against db
var credentials = {
'username' : ''
};
io.on('connection', function(socket){
// verify if client has username
socket.on('login', function(credentials){
if(credentials.username) {
this.username = credentials.username;
console.log( this.username + ' connected');
io.emit('notice', this.username + ' connected');
}
else {
console.log( 'USER GOT DENIED' );
socket.disconnect();
}
// when message received
socket.on('chat message', function (msg) {
var message = this.username + ': ' + msg;
io.emit('chat message', message);
});
});
// when user disconnects
socket.on('disconnect', function(){
console.log( this.username + ' disconnected');
});
});
http.listen(port, ip);
console.log('listening on ' + ip + ':' + port);
客户
var socket = io.connect("irc-abc.rhcloud.com:3000");
var username = '<?php if(isset($_SESSION['username'])) echo $_SESSION['username'];
else echo 'guest'; ?>';
var credentials = {
'username' : username
};
socket.emit('login', credentials);
$('form').submit(function() {
if ($('#m').val()) {
socket.emit('chat message', $('#m').val());
$('#m').val('');
}
window.scrollTo(0,document.body.scrollHeight);
return false;
});
socket.on('chat message', function(msg){
$('#messages').append($('<li>').text(msg));
window.scrollTo(0,document.body.scrollHeight);
});
socket.on('notice', function(notice){
$('#messages').append($('<li>').text(notice));
window.scrollTo(0,document.body.scrollHeight);
});
我要做的第一件事是检查端口 3000 是否有防火墙。一些(大多数)主机防火墙所有不常用的端口(80、443 等)。如果您不能让他们立即更改防火墙,请使用端口 80 进行测试。