您如何将 websocket 设置为外部 API?

Posted

技术标签:

【中文标题】您如何将 websocket 设置为外部 API?【英文标题】:How do you set up a websocket to an external 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 我已经开始了,这就是我得到的错误 【参考方案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 的服务器端部分。我指出的文档有一个关于广播的部分。使用它通过套接字发送数据。 非常感谢!我现在就设置它

以上是关于您如何将 websocket 设置为外部 API?的主要内容,如果未能解决你的问题,请参考以下文章

如何从外部 api 读取属性并将其设置为 springboot 中的应用程序上下文以使其全局可用?

如何将 Slack 机器人扩展到 1000 个团队

Angular Universal 和外部 API

如何使用 AWS 设置无 ui 的外部 API 身份验证?

订阅 Action Cable 频道时如何设置参数

Laravel 为外部用户登录成功设置会话或令牌 - 无用户仅数据库 Api 用户