【问题标题】:How do you set up a websocket to an external API?您如何将 websocket 设置为外部 API?
【发布时间】:2020-01-02 16:22:45
【问题描述】:

我设置了一条从openweathermap API获取城市天气的路线

index.js 文件

var express  = require("express"),
    router   = express.Router();
var weather = require("openweather-apis");

router.get("/weather", function(req, res){
  weather.setCity('Miami');
  weather.setAPPID(appID);
  weather.getAllWeather(function(err, allWeather){
    res.json({allWeather: allWeather});
  });
});

我想为此路由设置一个 websocket,这样每次发生变化时,我都会得到一个可以显示给用户的更新。我试过这个:

index.ejs 文件

<script src="https://cdn.jsdelivr.net/npm/socket.io-client@2/dist/socket.io.js"></script>
<script>
  var socket = io('http://localhost:3000/weather');
  socket.on('connect', function(){});
  socket.on('event', function(data){
   // do something
  });
  socket.on('disconnect', function(){});
</script>

但我不断收到错误。如果有人可以让我知道我做错了什么,请帮忙!

我收到以下错误:

index.js:83 GET http://localhost:3000/socket.io/?EIO=3&transport=polling&t=Mzd4Dpj 404 (Not Found)

【问题讨论】:

  • 请发布错误详情。
  • 更新了错误答案!
  • websockets 提供路由?我认为显示的第一个代码是一个 express.js,它提供了一个 Web 服务器,第二个是 Socket.io,它依赖于一个 WebSOCKETServer。这不会一起工作
  • @Mandalina - 你启动了服务器吗?我:e node server.js (or your backend file)?
  • @random ya 我已经开始了,这就是我得到的错误

标签: javascript express websocket


【解决方案1】:

你本身不能。客户端连接到 websocket。 websocket 不连接任何东西,它是客户端连接的。 (websocket 客户端无法连接到常规 HTTP 端点)。

如果您想在对传统 HTTP Web 服务的响应发生变化时通过 Websocket 广播数据,那么您需要轮询 Web 服务的 URL(例如使用 setInterval),然后在您使用 Websocket 时通过 Websocket 发送数据在响应中获取新数据。

http://localhost:3000/socket.io/?EIO=3&amp;transport=polling&amp;t=Mzd4Dpj 给你一个404 错误,因为你没有在服务器上提供一个 websocket 供客户端连接。 getting started documentation 将引导您设置 Socket.io 的服务器端。在没有服务器连接的情况下,您不能使用客户端的一半。

【讨论】:

  • 嘿,非常感谢您的回复!如何通过 websocket 设置轮询?
  • @Mandalina — 担心首先设置 websocket 的服务器端部分。我指出的文档有一个关于广播的部分。使用它通过套接字发送数据。
  • 非常感谢!我现在就设置它
猜你喜欢
  • 1970-01-01
  • 2019-12-19
  • 1970-01-01
  • 2015-09-16
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 2022-12-04
相关资源
最近更新 更多