我想在GAE上用socket io运行在节点js中编写的p2p聊天。
我的应用程序在本地工作正常,但是当我在与我认为的套接字相关的GAE服务器上运行时,我收到错误消息。
以下是我本地client.html
在本地运行时的两个相关脚本标记:
<script src="/socket.io/socket.io.js"></script>
<!-- <script src="https://cdn.socket.io/socket.io-1.2.0.js"></script> -->
<script type="text/javascript">
// our socket.io code goes here
var socketio = io.connect("127.0.0.1:1337");
socketio.on("message_to_client", function (data) {
to_history(data['message']);
});
function send_message() {
var msg = [document.getElementById("text1").value, user1, uuid];
socketio.emit("message_to_server", {
message: msg
});
}
</script>
我见过博客/帖子说要进行部署我需要允许防火墙规则here on SO(现在已经存在)。我还尝试将部署的应用程序指向静态外部IP(在我的谷歌云控制台中将其静态化后):
var socketio = io.connect('https://104.197.51.XXX')
或将其指向防火墙规则中指定的端口65080(请参阅Google here提供的文档:
var socketio = io.connect('https://104.197.51.XXX:65080')
这些都不起作用。
我已经加载了很好的html和我拥有的jQuery部分,而且css也加载得很好。这只是套接字的东西,我似乎出错了。我需要改变什么?
如果有用,请点击app.yaml:
runtime: nodejs
vm: true
非常感谢任何帮助。感谢。
答案 0 :(得分:5)
可悲的是,App Engine还不支持websockets(尚未)。由于以下几个原因,您正在使用的黑客攻击真的不可靠:
简而言之 - 这不是生产准备。那已经说过......
https://github.com/GoogleCloudPlatform/nodejs-docs-samples/tree/master/appengine/websockets
该链接将向您显示一个工作示例以及如何设置它的说明。
而不是 - 我建议使用pubnub: https://www.pubnub.com/docs/nodejs-javascript/pubnub-javascript-sdk
它有一个非常好的API,并且比你可以与App Engine一起破解的任何东西都更可靠(你知道,直到我们修复它)。你可以看到我在这里做过的一些例子:
我希望这有帮助!
答案 1 :(得分:1)
我最近也做了类似的聊天webapp并将其部署在heroku(https://chatterboxxx.herokuapp.com)上。我也使用了socket.io。我不确定GAE,但我认为你不需要在socket.io js代码中指定任何IP地址。 我认为你应该使用
var socketio = io();
而不是
var socketio = io.connect("127.0.0.1:1337");
这适合我。