推荐 最新
只想躺平

根据websocket实时获取到uid和health,实时渲染到Echarts折线图上面?

[ { health: 94, height: 500, id: 19, latitude: 30.74378681, longitude: 103.9291311, offLineNum: 0,onLineNum: 2,state: 0,uid: 1 }, { health: 20, height: 500, id: 19, latitude: 30.74378681, longitude: 103.9291311, offLineNum: 0,onLineNum: 2,state: 0,uid: 2 }, { health: 80, height: 500, id: 19, latitude: 30.74378681, longitude: 103.9291311, offLineNum: 0,onLineNum: 2,state: 0,uid: 3 }, { health: 40, height: 500, id: 19, latitude: 30.74378681, longitude: 103.9291311, offLineNum: 0,onLineNum: 2,state: 0,uid: 4 } ................................. ] 请问大佬们,如何写一个根据websocket实时获取到uid和health字段,渲染到Echarts折线图上面,然后自定义了一个大小,当发送的数据大于自定义的大小时候,就会删除前面的旧数据,新数据继续生成,保持折线图上面一直只会显示的自定义大小的数据条数

13
1
0
浏览量217
Frank的私人司机

科大讯飞 Websockets API 的问题?

尝试调用科大讯飞的实时语音流式转写接口:"https://www.xfyun.cn/doc/asr/voicedictation/API.html" (https://link.segmentfault.com/?enc=PLnKZAeT4Bw2UoSXMEjUFg%3D%3D.lDWn5QPVYf%2BsRedc0uyHSOBkB0%2FgTgiepBLC7YdPYYHQPT5TdPPCHVa7aUPvO60cIOQ798Beu30x8ysGs1ihkQ%3D%3D) xunfei = XunFei(APPID='...', APISecret='...', AudioFile=r'test.pcm') url = xunfei.create_url() async def hello(): async with websockets.connect(url) as websocket: cc = xunfei.read_audio() print("数据:" + json.dumps(cc)) await websocket.send(str(json.dumps(cc))) while True: message = await websocket.recv() print(f"收到消息: {json.loads(message)}") if __name__ == "__main__": asyncio.run(hello()) 但老是报错 Traceback (most recent call last): File "/var/www/QBA/config/voice.py", line 135, in asyncio.run(hello()) File "/usr/local/lib/python3.11/asyncio/runners.py", line 190, in run return runner.run(main) ^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/asyncio/runners.py", line 118, in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/asyncio/base_events.py", line 653, in run_until_complete return future.result() ^^^^^^^^^^^^^^^ File "/var/www/QBA/config/voice.py", line 131, in hello message = await websocket.recv() ^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/websockets/legacy/protocol.py", line 568, in recv await self.ensure_open() File "/usr/local/lib/python3.11/site-packages/websockets/legacy/protocol.py", line 944, in ensure_open raise self.connection_closed_exc() websockets.exceptions.ConnectionClosedOK: received 1000 (OK) Websocket closed!,sid=iat000dc91f@dx18ad01d4a38a11f802!reason=server read msg timeout; then sent 1000 (OK) Websocket closed!,sid=iat000dc91f@dx18ad01d4a38a11f802!reason=server read msg timeout 不懂这是为什么,但是我发个普通的消息就会立马得到反馈

13
1
0
浏览量373
脑洞大咖

列表数据频繁闪烁?

const onMessage = async (event) => { const data = JSON.parse(event.data); if (data.data == undefined) { console.log('未响应'); } else { console.log(data.data); if (data.data.state !== undefined) { // 查找是否存在相同uid的数据 const existingDataIndex = TagInfoData.value.findIndex(item => item.uid === data.data.uid); if (existingDataIndex !== -1) { // 如果uid已存在,更新对应的数据 const existingData = TagInfoData.value[existingDataIndex]; existingData.frequency = data.data.frequency; // 更新frequency字段 existingData.state = data.data.state } else { // 如果uid不存在,新增一行数据 TagInfoData.value.push({ uid: data.data.uid, angle: 0, height: 0, confi: 0, longitude: 0, latitude: 0, speed: 0, state: 0, frequency: data.data.frequency }); } } else { const targetingTypes = { 0x10: 'RTK', 0x11: 'UWB', 0x12: '融合' }; // 查找是否存在相同uid的数据 const existingDataIndex = TagInfoData.value.findIndex(item => item.uid === data.data.uid); if (existingDataIndex !== -1) { // 如果uid已存在,更新对应的数据 const existingData = TagInfoData.value[existingDataIndex]; existingData.TargetingType = targetingTypes[data.data.type]; existingData.uid = data.data.uid; existingData.angle = data.data.angle; existingData.height = data.data.height; existingData.confi = data.data.confi; existingData.longitude = data.data.longitude; existingData.latitude = data.data.latitude; existingData.speed = data.data.speed; existingData.frequency = frequencyData.value; // 将frequency字段设置为frequencyData的值 } else { // 如果uid不存在,新增一行数据 TagInfoData.value.push({ TargetingType: targetingTypes[data.data.type], uid: data.data.uid, angle: data.data.angle, height: data.data.height, confi: data.data.confi, longitude: data.data.longitude, latitude: data.data.latitude, speed: data.data.speed, frequency: frequencyData.value }); } } } }; "图片.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241230/ce081fbb6ef972c088d1fe15ef8859db.png) 通过websocket实时发送的数据,上述代码的实现会使定位频率(frequency)字段频繁闪烁,大佬们帮忙看看如何解决呢?谢谢

12
1
0
浏览量216
光光哥乌昂

怎么使用redis缓存websocket实例?

如果直接存在内存的话,感觉有点不靠谱,如果连接数大的时候,会引发内存泄漏?那该怎么缓存"ws"实例呢? import {WebSocketServer} from 'ws'; const wss = new WebSocketServer({ port: 8080, }); wss.on('connection', function (ws) { // 为了防止内存泄漏,怎么把ws实例用redis缓存起来?然后,需要使用的时候,从redis获取并send // 使用redis set的话,只能存储字符串,ws无法JSON.stringify?报错了 }) 这方面的优化怎么做呢?求各位大佬指点指点

10
1
0
浏览量329
接地气的编码师

如何用next+react+websocket实现一个双人版的wordle游戏?

如何用next+react+websocket实现一个双人版的wordle游戏? 现在我用next+react复刻了"wordle小游戏" (https://link.segmentfault.com/?enc=ovipjTByMkMrDS2mBs5ZFA%3D%3D.IS9wmpOZsYESlZ4CnpZOch6OgvSEnjrYSyfigdgsHW6NKkKFnATJOHL9Gdzz50fF),现在我想要添加一个双人模式。 点击双人模式按钮,弹出一个modal,显示一个链接。将该链接分享给别人,当别人访问该链接的时候就,两个人就可以开始轮番猜词共同挑战一个wordle题目了。 需要实时更新同步两个人的操作,"HTTP协议"应该是做不到的,应该需要借助"websocket"协议。 大体思路(不知是否可行): 点击双人模式按钮, 发出请求"/tow-player" => 服务端next+router handle,开启一个websocket服务,并将可以表示这个websocket的标识符传回去 => 本地的websokcet就可以通过这个标识和发送和接收信息,同步两个玩家的操作了。

0
1
0
浏览量213
777七月

SSE是否更适合开发im?

像chatgpt这些对话功能都是基于sse开发,那是否再延伸下,用sse开发im?适合吗? http发送消息,sse推送

0
1
0
浏览量209
笑面猫

vue使用websocket?

代码 点击发送 import { baseURL } from '@/config' import request from '@/utils/request' export default { data() { return { // wsUrl: 'ws://192.168.1.109:8900/applet/user/chat/176', // ws地址 // socket: null, // ws实例 socket: null, // authorizationToken: 'your-authorization-token', // 假设你已经有了授权令牌 form: {} }; }, beforeDestroy() { if (this.socket) { this.socket.close(); } }, mounted() { this.refreshToken() }, methods: { refreshToken() { const that = this request({ url: `${baseURL}captcha`, method: 'get', }).then(function (result) { if (result.success) { that.form.csrfToken = result.data.csrfToken } }) }, connectToWebSocket() { this.socket = new WebSocket('ws://192.168.1.109:8900/applet/user/chat/176'); this.socket.onopen = () => { // 连接打开后,发送包含授权信息的消息给服务器 const authMessage = { authorizationToken: this.form.csrfToken }; this.socket.send(JSON.stringify(authMessage)); }; this.socket.onmessage = (event) => { console.log('Received:', event.data); }; this.socket.onerror = (error) => { console.error('WebSocket Error:', error); }; this.socket.onclose = () => { console.log('WebSocket is closed now.'); }; } } }; ws://192.168.1.109:8900/applet/user/chat/176是后端接口,这个接口要带上token的值,token的值放在authorization,176是userId,目前是写死,用上面的代码 在控制台里报VM10734 ceshi.vue:40 WebSocket connection to 'ws://192.168.1.109:8900/applet/user/chat/176' failed: Error during WebSocket handshake: Unexpected response code: 200,尝试过几种写法都没有效果 想要的效果是WebSocket 跟 上面的接口 实时通讯,大佬们遇到这样的情况要怎么解决 https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241002/b86e18846e34be6b8104eaef61bf67ce.png

0
1
0
浏览量198
笑面猫

Node.js v22中,WebSocket如何使用?

Node.js v22中,WebSocket如何使用? 希望得到代码案例。

0
1
0
浏览量197
大厂球袋

Chrome Devtools开发者工具如何保存Websocket连接的所有 message?

ws 的连接只能单条 copy,不能 copy all,很不方便。 实际开发中,需要过滤数据,查找有效的目标数据。 或者能不能通过 apifox、抓包等方式,把这些 message 保存下来呢?

0
1
0
浏览量186
北北che

java 使用 websocket 的包, 连接 wss 的 websocket 失败?

使用 jar 包 , 连接 websocket, 用域名的方式连接失败, 中间有通过 nginx 转发 org.java-websocket Java-WebSocket 1.5.3 用浏览器的控制台 new Websocket(wss://域名) 已经成功 nginx 配置正常的 , 用于 websocket 的配置添加了 proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_http_version 1.1; 使用 ws://域名 方式报 400 错误 用 wss://域名 方式 nginx 连请求都没收到 域名是买的, 是能通过验证的 使用 http 直接连接服务的方式是成功的 java 代码 ClientWs clientWs = new ClientWs(url); clientWs.connect(); while (!clientWs.getReadyState().equals(ReadyState.OPEN)) { try { Thread.sleep(1000); } catch (InterruptedException e) { } System.out.println("Connecting..."); if (clientWs.getReadyState() == ReadyState.CLOSED){ System.out.println("连接失败"); System.exit(-1); } } System.out.println("Connected."); public class ClientWs extends WebSocketClient { public ClientWs(URI serverUri) { super(serverUri); trustAllHosts(this); } public ClientWs(URI serverUri, Map httpHeaders) { super(serverUri, httpHeaders); trustAllHosts(this); } @Override public void onOpen(ServerHandshake serverHandshake) { } @Override public void onMessage(String s) { } @Override public void onClose(int i, String s, boolean b) { } @Override public void onError(Exception e) { } static void trustAllHosts(ClientWs clientWs){ TrustManager[] trustAllCerts =new TrustManager[]{new X509TrustManager(){ @Override public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException { } @Override public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException { } @Override public X509Certificate[] getAcceptedIssuers() { return new java.security.cert.X509Certificate[]{}; } }}; try { SSLContext ssl = SSLContext.getInstance("TLS"); ssl.init(null, trustAllCerts,new java.security.SecureRandom()); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (KeyManagementException e) { e.printStackTrace(); } } }

0
1
0
浏览量180