使用 sails.io 库将跨域-socket.io 集成到客户端
Integrate cross-domain-socket.io using sails.io library to client
我已经在我的服务器上编写了一个基于 sails.js 的聊天应用程序,所以客户端的所有代码基本上都是 运行 在本地主机上。
聊天就像做梦一样,但现在我想将所有客户端移动到我的 cordova 应用程序。
这是我的服务器端代码(socket.js)
onConnect: function(session, socket) {
// By default, do nothing.
console.log('hello');
socket.emit('news', "Welcome to the chat");
socket.on('send message', function(data){
console.log(data);
socket.broadcast.emit('new', data);
sails.sockets.emit(sails.sockets.id(socket),'new', data);
});
},
这是我的客户端(服务器本地主机)聊天文件:
$('#form1').submit(function(e){
e.preventDefault();
io.socket.emit('send message', $('#userText').val());
$('#userText').val('');
});
io.socket.on('news', function (msg) {
console.log(msg);
$('#content').append(msg + '<br />');
});
io.socket.on('new', function(data){
console.log(data);
$('#content').append(data + '<br />');
});
这是请求 userCategories API:
的客户端(服务器本地主机)
io.socket.get('http://178.62.83.248:1337/userCategories', function (resData) {
console.log(resData); // => {id:9, name: 'Timmy Mendez'}
});
io.socket.on('usercategories', function(message){
console.log(message);
});
现在这是我在我的 cordova 客户端上尝试过的 (index.js):
<script src="lib/sails.io.js/sails.io.js"></script>
<script>
io.sails.url = 'http://178.62.83.248:1337';
io.socket.get('http://178.62.83.248:1337/userCategories', function (resData) {
console.log(resData); // => {id:9, name: 'Timmy Mendez'}
});
io.socket.on('usercategories', function(message){
console.log(message);
});
</script>
此代码的行为非常奇怪 way.when 应用程序启动,它尝试连接到:http://178.62.83.248:1337/__getcookie
然后它失败了? returns 我在控制台中看到这条消息:
Socket is trying to reconnect to Sails...
_-|>_- (attempt #1)
Socket is trying to reconnect to Sails...
_-|>_- (attempt #2)
尝试 43、44 等...
所以我希望有人能向我解释这是什么意思,我该如何解决这个问题。
我已经解决了这个问题。发生这种情况的原因是因为当您在客户端上安装 sails.io 文件时,您实际上安装的是最新版本。为了连接到您的服务器,您需要使用正确版本的 sails io.js。在我的例子中,我在服务器上使用了 sails 10.5,所以我必须在我的客户端中包含特定文件
我已经在我的服务器上编写了一个基于 sails.js 的聊天应用程序,所以客户端的所有代码基本上都是 运行 在本地主机上。
聊天就像做梦一样,但现在我想将所有客户端移动到我的 cordova 应用程序。
这是我的服务器端代码(socket.js)
onConnect: function(session, socket) {
// By default, do nothing.
console.log('hello');
socket.emit('news', "Welcome to the chat");
socket.on('send message', function(data){
console.log(data);
socket.broadcast.emit('new', data);
sails.sockets.emit(sails.sockets.id(socket),'new', data);
});
},
这是我的客户端(服务器本地主机)聊天文件:
$('#form1').submit(function(e){
e.preventDefault();
io.socket.emit('send message', $('#userText').val());
$('#userText').val('');
});
io.socket.on('news', function (msg) {
console.log(msg);
$('#content').append(msg + '<br />');
});
io.socket.on('new', function(data){
console.log(data);
$('#content').append(data + '<br />');
});
这是请求 userCategories API:
的客户端(服务器本地主机)io.socket.get('http://178.62.83.248:1337/userCategories', function (resData) {
console.log(resData); // => {id:9, name: 'Timmy Mendez'}
});
io.socket.on('usercategories', function(message){
console.log(message);
});
现在这是我在我的 cordova 客户端上尝试过的 (index.js):
<script src="lib/sails.io.js/sails.io.js"></script>
<script>
io.sails.url = 'http://178.62.83.248:1337';
io.socket.get('http://178.62.83.248:1337/userCategories', function (resData) {
console.log(resData); // => {id:9, name: 'Timmy Mendez'}
});
io.socket.on('usercategories', function(message){
console.log(message);
});
</script>
此代码的行为非常奇怪 way.when 应用程序启动,它尝试连接到:http://178.62.83.248:1337/__getcookie 然后它失败了? returns 我在控制台中看到这条消息:
Socket is trying to reconnect to Sails...
_-|>_- (attempt #1)
Socket is trying to reconnect to Sails...
_-|>_- (attempt #2)
尝试 43、44 等...
所以我希望有人能向我解释这是什么意思,我该如何解决这个问题。
我已经解决了这个问题。发生这种情况的原因是因为当您在客户端上安装 sails.io 文件时,您实际上安装的是最新版本。为了连接到您的服务器,您需要使用正确版本的 sails io.js。在我的例子中,我在服务器上使用了 sails 10.5,所以我必须在我的客户端中包含特定文件