node.js - 如何使用 Express post 请求发出 Socket.io 或 Sockjs?

标签 node.js express socket.io samsung-smart-tv

我知道这个问题有点尴尬,但问题来自 Samsung TV 2010/2011 SmartTV(和蓝光播放器;当然 2012 模拟器工作正常)。我将来自源和包的简单聊天示例移植到 SmartTV 应用程序。他们都退回到 JSONP 轮询,但从 SmartTV 应用程序只能发出/推送到服务器一次。从服务器接收消息可能多次没有任何问题。在三星 D 论坛中寻找答案后(当然什么也没有),我认为解决这个问题最快的方法是部署一个 Express 服务器,获取发布数据和 JSON.parse,然后在内部发出 Socket.io/Sockjs在服务器本身内部。

谁能告诉我一个简单的示例代码,以便我可以从那里开始?非常感谢。

我快速编写代码,但似乎不起作用:

lib/server.js

var express = require('express')
  , app = express.createServer()
  , io = require('socket.io').listen(app);

app.listen(80);

app.use(express.bodyParser());

app.get('/', function (req, res) {
  res.sendfile('/var/www/mpgs_lite_v3/index.html');
});

app.post('/', function(req, res){
  console.log(req.body);
  io.sockets.emit('my other event', req.body);
  res.redirect('back');
});

io.sockets.on('connection', function (socket) {
  //socket.emit('news', { hello: 'world' });
  socket.on('my other event', function (data) {
    console.log(data);
  });
});

index.html

<html>
<head>
<script src="/socket.io/socket.io.js"></script>
<script>
  var socket = io.connect('http://localhost');
  socket.on('news', function (data) {
    console.log(data);
    socket.emit('my other event', { my: 'data' });
  });
</script>
</head>
<body>
<form method="post" action="/">
     <input type="hidden" name="_method" value="put" />
     <input type="text" name="user[name]" />
     <input type="text" name="user[email]" />
     <input type="submit" value="Submit" />
 </form>
</body>
</html>

“我的其他事件”似乎没有收到任何东西。

最佳答案

更新:我为您更新了示例,使其更加完整。我之前没有 app.listen,这里还有一个客户端脚本,它确实可以正常工作:

<!doctype html>
<html>
    <head>
        <script src="//www.google.com/jsapi"></script>
        <script src="/socket.io/socket.io.js"></script>
        <script>google.load("jquery", "1.7.1")</script>
        <script>
            var socket = io.connect("localhost", {port: 3000});
            socket.on("foo", function(message) { console.log("foo: ", message) });
            $(function() {
                $("button").click(function() {
                    $.post("/foo", { message: $("input").val() });
                });
            });
        </script>
    </head>
    <body>
        <input type=text>A message</input>
        <button>Click me!</button>
    </body>
</html>

还有服务器,现在有一个 app.listen 指令:

var express = require("express"),
    app = express.createServer(),
    io = require("socket.io").listen(app)
    index = require("fs").readFileSync(__dirname + "/index.html", "utf8");

app.use(express.bodyParser());

app.get("/", function(req, res, next) {
    res.send(index);
});

app.post("/foo", function(req, res, next) {
    io.sockets.emit("foo", req.body);
    res.send({});
});

app.listen(3000);

用法:

node app.js

导航到 http://localhost:3000/ 并单击按钮。检查控制台的输出。

关于node.js - 如何使用 Express post 请求发出 Socket.io 或 Sockjs?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9411793/

相关文章:

node.js - Node.js 中的共享内部内存池是什么

node.js - gulp-watch 只运行一次

javascript - 使用 Router() 参数表达

node.js - 使用 Node socket.io 向特定用户列表发送通知

node.js - 无法连接到 Socket.io 错误 : xhr poll error

使用 Node JS 转换 Java 到 JavaScript

node.js - 使用 jasmine-node 通过自动测试来测试 meteor 应用程序

node.js - 如何使用 NodeJs 连接到 docker compose 中的 postgres?

javascript - Node.js 应用程序的布局

javascript - iMacros 和 socket.io