使用Tessel设备与Heroku服务器进行WebSocket通信
目的 – 为了达到某个预定的结果或目标而进行的行动或活动。
(Note: The given phrase is already in Chinese. Paraphrasing it would simply involve providing synonyms or rephrasing it in a different way.)
在Tessel上似乎无法使用Socket.io客户端,所以我尝试了另一种WebSocket通信的方法。这次我将使用Tessel的WebSocket通信示例以及通过npm安装的nodejs-websocket库。
顺便提一下,我刚刚了解到,Socket.io似乎不能直接连接原生的WebSocket。虽然我还没有查看过源代码,所以不太确信,如果有人知道如何做,请告诉我一下。
请使用以下内容进行参考
尝试使用socket.io客户端
使用WebSocket:
https://forums.tessel.io/t/使用WebSocket/821
socket.io有类似sockjs的原始WebSocket访问吗?
操作步骤
服务器端的实现
我准备了以下的源代码。
我会在npm上安装nodejs-websocket和mongoose。我觉得应该是这样的。我使用mongoose将WebSocket收到的JSON存储起来以供确认之用。
$npm install nodejs-websocket --save
$npm install mongoose --save
var ws = require('nodejs-websocket');
var mongoose = require('mongoose');
var port = process.env.PORT || 8000;
var mongodb_uri = process.env.MONGOLAB_URI;
var db = mongoose.connect(mongodb_uri);
var HelloSchema = new mongoose.Schema({
date:{type:String}
});
var Hello = db.model('hello', HelloSchema);
// Create the websocket server, provide connection callback
var server = ws.createServer(function (conn) {
console.log('Accepted new connection...');
// If get a binary stream is opened up
conn.on('binary', function(stream) {
// When we get data
stream.on('data', function(data) {
// Log the data
console.log('Got data:', data.toString());
var hello = new Hello(JSON.parse(data));
hello.save(function(err){
if(err){
console.log(err);
return;
}
console.log("saved");
});
});
});
conn.on("close", function (code, reason) {
console.log("Connection closed");
});
}).listen(port);
console.log('Listening on port', port);
MONGOLAB_URI是mongolab服务器的URI,格式如下所示。
mongodb://<USER>:<PASS>@xxxx.mongolab.com:49150/<SCHEMA>
将应用程序部署到Heroku上。
我认为是这个样子的。
$git init
$git add .
$git commit -m "initial commit"
$heroku craete <Application Name>
$git push heroku master
这次我们通过Web控制台设置了两个环境变量MONGODB_URI和PORT。但是使用命令更简单呢。
http://chomast.com/study/web/heroku-environment-variables.html
客户端的实现
var ws = require('nodejs-websocket');
// Set the binary fragmentation to 1 byte so it instantly sends anything we write to it
ws.setBinaryFragmentation(1);
// When we get a connection
var connection = ws.connect('ws://<URI>', function(err) {
if(err){
console.log(err);
return;
}
console.log("connected");
setInterval(function (){
var now = new Date();
var str = '{ "date" : "' + now + '" }';
connection.sendBinary(new Buffer(str));
}, 1000);
});
在执行之前需要先进行nodejs-websocket的npm安装。
最好从本地进行一次正常的操作确认。
$node client.js
这次我通过查看MongoLab的消息来进行了操作确认。
在 Tessel 上运行
$tessel run client.js
似乎有动过。 guò.)