从Meteor.js打开一个Websocket连接

我们怎样才能从Meteor打开一个Websockets连接?

我们可以做些什么:

ws = new WebSocket('ws://localhost/path'); ws.on('open', function() { ws.send('something'); }); ws.on('message', function(message) { console.log('received: %s', message); }); 

错误: ReferenceError: WebSocket is not defined


使用socket.io npm包

 var io = Meteor.require('socket.io') var socket = io.connect('http://localhost'); 

错误: TypeError: Object #<Object> has no method 'connect'


使用ws npm包

 var WebSocket = Meteor.require('ws'); var ws = new WebSocket('ws://localhost'); 

错误: Error: Cannot find module '../build/default/bufferutil'

我创build了一个新的meteor包joncursi:socket-io-client来解决这个问题。 有关更多详细信息和示例用法,请参阅https://atmospherejs.com/joncursi/socket-io-client 。 由于我已经将NPM二进制文件捆绑到一个软件包中,所以您不必担心安装NPM软件包,声明NPM.require()依赖性等。最重要的是,您可以部署到.meteor.com而无需一个顺利。

有一个名为Meteor Streams的包,可以让你做类似的事情,使用现有的meteorwebsocket连接到本地服务器:

 chatStream = new Meteor.Stream('chat'); if(Meteor.isClient) { sendChat = function(message) { chatStream.emit('message', message); console.log('me: ' + message); }; chatStream.on('message', function(message) { console.log('user: ' + message); }); } 

我不确定你想连接到另一台服务器或本地服务器,如果它是另一台服务器,你可以使用你提供的例子。 我build议在客户端不允许使用websocket(因此需要websocket仿真)的情况下,使用其他类似SockJS或socket.io的东西。

根据这个问题的答案,这是一个openshift博客文章,你回答是:(问题: 如何为客户端设置meteorWebSocket端口? )

我现在挣扎了一会儿,我尝试了不同的东西。 在OpenShift中为我工作的解决scheme是这样的:

设置DDP_DEFAULT_CONNECTION_URLvariables

 //for http process.env.DDP_DEFAULT_CONNECTION_URL = 'http://' + process.env.OPENSHIFT_APP_DNS + ':8000' //for ssl process.env.DDP_DEFAULT_CONNECTION_URL = 'https://' + process.env.OPENSHIFT_APP_DNS + ':8443' 

根据这个博客文章: https : //www.openshift.com/blogs/paas-websockets

你可以试试这里是解决scheme: https : //github.com/Akryum/meteor-socket-io