从 Meteor.js 打开一个 Websocket 连接
Posted
技术标签:
【中文标题】从 Meteor.js 打开一个 Websocket 连接【英文标题】:Open a Websocket connection from Meteor.js 【发布时间】:2014-03-04 15:39:28 【问题描述】:我们如何从 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
使用 socket.io npm 包
var io = Meteor.require('socket.io')
var socket = io.connect('http://localhost');
Error: TypeError: Object # has no method 'connect'
使用 ws npm 包
var WebSocket = Meteor.require('ws');
var ws = new WebSocket('ws://localhost');
错误:错误:找不到模块'../build/default/bufferutil'
【问题讨论】:
【参考方案1】:您可以尝试这里的解决方案: https://github.com/Akryum/meteor-socket-io
【讨论】:
【参考方案2】:根据this question's answer指的是openshift博客文章, 你的回答是: (问题:How to set Meteor WebSocket port for clients?)
我为此苦苦挣扎了一段时间,并尝试了不同的方法。 在 OpenShift 中对我有用的解决方案是:
设置 DDP_DEFAULT_CONNECTION_URL 变量
//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
【讨论】:
【参考方案3】:我创建了一个新的 Meteor 包joncursi:socket-io-client
来解决这个问题。有关更多详细信息和示例用法,请参阅https://atmospherejs.com/joncursi/socket-io-client。由于我已经为您将 NPM 二进制文件捆绑到一个包中,因此您不必担心安装 NPM 包、声明 NPM.require()
依赖项等。最重要的是,您可以毫不费力地部署到 .meteor.com
。
【讨论】:
有没有办法在没有socket.io连接的情况下将它用于普通的websockets连接?【参考方案4】:有一个包叫Meteor Streams,可以让你做类似的事情,使用现有的meteor websocket连接到本地服务器:
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);
);
我不确定您想连接到另一台服务器还是本地服务器,如果是另一台服务器,您可以使用您提供的示例。在客户端不允许使用 websocket(因此需要 websocket 仿真)的情况下,我建议使用 SockJS 或 socket.io 之类的其他东西。
【讨论】:
我想连接一个非 Meteor Websocket 服务。使用我的示例,我得到错误ReferenceError: WebSocket is not defined
。我尝试了socket.io
npm 包,但使用Meteor.require('socket.io').connect('http://localhost'), I get the error
Object #
你是在客户端的服务器上做这个吗?
如果来自服务器@npmjs.org/package/faye-websocket,请尝试使用faye-websockets npm 模块
我正在客户端尝试这个,尝试连接到 WebSocket 服务器。
发生这种情况是因为您的服务器是 socket.io 服务器,如果您有一个 websocket 服务器,则不会发生这种情况。这个 npm 模块应该可以帮助您使用 socket.io 服务器@npmjs.org/package/socket.io-client以上是关于从 Meteor.js 打开一个 Websocket 连接的主要内容,如果未能解决你的问题,请参考以下文章