我正在尝试制作一个简单的IRC来了解事情是如何运作的。我已经设置了一个本地节点服务器和另一个连接到localhost的工作区,他们说得很好。但是当我将本地服务器推送到Openshift并尝试使用带有;
的客户端连接到它时var socket = io.connect("http://irc-abc.rhcloud.com:3000");
它没有连接。
我在这里做错了什么,或者我怎样才能做到这一点?
注意:我是websockets的新手,我正试图理解它们,我可能错过了大局。
是的,我确实在stackoverflow上找到了很多类似的问题,但它对我没有帮助,因为我说我对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);
});
答案 0 :(得分:1)
我要做的第一件事就是检查端口3000是否有防火墙。一些(大多数)主机防火墙通常不使用的所有端口(80,443等)。如果您无法立即更改防火墙,请使用端口80进行测试。