Using Socket.IO’s WebSocket I have successfully managed a chat application from my home computer where both the index.html and app.js (server) located together. Since my webhost does not offer WebSockets I want to host the app.js (server) on my computer and the actual webpage where it connects on my webhost. I am having difficulties establishing a connection. My port is forwarded. I believe its something in my app.js that I need to change to establish the link. Here is my code
app.js (server, run off local computer)
var app = require('express').createServer()
var io = require('socket.io').listen(app);
app.listen(8080);
// routing
app.get('/', function (req, res) {
res.sendfile('http://mywebhost.com/chat.php');
});
// usernames which are currently connected to the chat
var usernames = {};
// rooms which are currently available in chat
var rooms = ['room1','room2','room3'];
io.sockets.on('connection', function (socket) {
// when the client emits 'adduser', this listens and executes
socket.on('adduser', function(username){
// store the username in the socket session for this client
socket.username = username;
// store the room name in the socket session for this client
socket.room = 'room1';
// add the client's username to the global list
usernames[username] = username;
// send client to room 1
socket.join('room1');
// echo to client they've connected
socket.emit('updatechat', 'SERVER', 'you have connected to room1');
// echo to room 1 that a person has connected to their room
socket.broadcast.to('room1').emit('updatechat', 'SERVER', username + ' has connected to this room');
socket.emit('updaterooms', rooms, 'room1');
});
// when the client emits 'sendchat', this listens and executes
socket.on('sendchat', function (data) {
// we tell the client to execute 'updatechat' with 2 parameters
io.sockets.in(socket.room).emit('updatechat', socket.username, data);
});
socket.on('switchRoom', function(newroom){
// leave the current room (stored in session)
socket.leave(socket.room);
// join new room, received as function parameter
socket.join(newroom);
socket.emit('updatechat', 'SERVER', 'you have connected to '+ newroom);
// sent message to OLD room
socket.broadcast.to(socket.room).emit('updatechat', 'SERVER', socket.username+' has left this room');
// update socket session room title
socket.room = newroom;
socket.broadcast.to(newroom).emit('updatechat', 'SERVER', socket.username+' has joined this room');
socket.emit('updaterooms', rooms, newroom);
});
// when the user disconnects.. perform this
socket.on('disconnect', function(){
// remove the username from global usernames list
delete usernames[socket.username];
// update list of users in chat, client-side
io.sockets.emit('updateusers', usernames);
// echo globally that this client has left
socket.broadcast.emit('updatechat', 'SERVER', socket.username + ' has disconnected');
socket.leave(socket.room);
});
});
chat.php (run on webhost)
<script>
var socket = io.connect(\'http://scope.bnetweb.org:8080\');
// various irrelevant javascript
in app.js I am fairly sure I need to change the
app.get('/', function (req, res) {
res.sendfile('http://mywebhost.com/chat.php');
});
to something else? Or remove it entirely? I think this is Socket.IO’s way of making sure no unauthorized connections are made. Any help is greatly appreciated in achieving this.
Solved by simply not splitting them up. IT appears many have this issue that they cannot mix server and client on different hosts. Possibly Socket.IO will make this easier soon. If anyone else comes up with a better alternative, please reply.