精华内容
下载资源
问答
  • 使用chrome和360浏览器都会接收不到消息,但是使用火狐浏览器能接收到消息,在其他电脑上用chrome又可以接收到消息,所以我很疑惑问题所在在哪,就算是重启服务器和本地电脑都无法接收到消息,更换端口才可以。
  • 因为本人在做测试的原因,所以目前来讲是由本地模拟websocket服务器发送信息,代码如下: a = [['{"type":"connected"}', 0.02992081642150879], [ '{"name": "jinku00", "_create_time": "1597808952003668224", ...

    因为本人在做测试的原因,所以目前来讲是由本地模拟websocket服务器发送信息,代码如下:

    a = [['{"type":"connected"}', 0.02992081642150879], [
        '{"name": "jinku00", "_create_time": "1597808952003668224", "id": "video_info:162c8ec6bb1e2900", "type": "video_create"}',
        12.115244626998901], [
             '{"num": "1", "ware_house_num": "0", "other": "0", "part": "0", "numid": "1", "ware_houseid": "0", "otherid": "0", "partid": "0", "_create_time": "1597808953300124160", "video_id": "video_info:162c8ec6bb1e2900", "type": "video_data", "time": 0.7333333333333333, "boxes": [{"x": "0.8818798065185547", "y": "0.8039905124240452", "w": "0.10922565460205078", "h": "0.18708140055338543", "track_id": "1", "area_forbidden": "0", "area_password": "0", "time_since_update": "0", "_create_time": "1597808953299739904"}]}',
             13.412984371185303], [
             '{"num": "0", "ware_house_num": "0", "other": "0", "part": "7", "numid": "0", "ware_houseid": "0", "otherid": "0", "partid": "-1", "_create_time": "1597809235015614720", "video_id": "video_info:162c8ec6bb1e2900", "type": "video_data", "time": 193.4, "boxes": [{"x": "0.8702903747558594", "y": "0.7768634937427662", "w": "0.12263660430908203", "h": "0.21259403935185187", "track_id": "1", "area_forbidden": "0", "area_password": "0", "time_since_update": "39", "_create_time": "1597809235014929920"}, {"x": "0.850169817606608", "y": "0.8524787055121528", "w": "0.08584976196289062", "h": "0.13751458062065972", "track_id": "2", "area_forbidden": "0", "area_password": "0", "time_since_update": "15", "_create_time": "1597809235015261440"}, {"x": "0.7672754923502604", "y": "0.8550824200665509", "w": "0.10524253845214844", "h": "0.13947324399594907", "track_id": "3", "area_forbidden": "0", "area_password": "0", "time_since_update": "32", "_create_time": "1597809235015441408"}]}',
             295.1296503543854], ['{"type": "video_finish", "id": "video_info:162c8ec6bb1e2900"}', 295.18749618530273]]
    print(len(a))
    b = 0
    import asyncio
    import json
    import random
    import ast
    import time
    import asyncio
    import websockets
    
    time1 = time.time()
    timehelp = 0
    USERS = set()
    
    
    async def echo(websocket, path):
        try:
            USERS.add(websocket)
            tt = {"type": "connected"}
            await websocket.send(json.dumps(tt))
            global b
            global timehelp
            while (True):
                # if(time.time()-time1>a[b][1]-173):
                # await asyncio.wait([user.send(json.dumps(ast.literal_eval(a[b][0]), ensure_ascii=False)) for user in USERS])
                print(a[b][1])
                await websocket.send(json.dumps(ast.literal_eval(a[b][0]), ensure_ascii=False))
                timehelp = a[b][1]
                b += 1
                # if (b == 1460):
                #     b = 0
                await  asyncio.sleep(0.001)
        finally:
            USERS.remove(websocket)
    
    
    start_server = websockets.serve(echo, "127.0.0.1", 3456)
    asyncio.get_event_loop().run_until_complete(start_server)
    asyncio.get_event_loop().run_forever()
    

    当然,数据没有全部上完,同时做了个接收端

    #!/usr/bin/env python
    
    # WS client example
    import ast
    import asyncio
    import time
    
    import websockets
    
    a = []
    b = 0
    time1 = time.time()
    
    
    async def hello():
        global b
        uri = "ws://localhost:3456"
        async with websockets.connect(uri) as websocket:  # 协程函数
            while (True):
                greeting = await websocket.recv()
                a.append([greeting, time.time() - time1])
                b += 1
                print(1)
                # if (b > 100):
                #     print(a)
                #     print()
                #     exit(0)
                print(ast.literal_eval(greeting).get('type'))
                if (ast.literal_eval(greeting).get('type') == "video_finish"):
                    with open('d.text', "wb+") as f:
                        f.write(bytes(str(a), encoding="utf-8"))
                    print(a)
                    print()
                    exit(0)
    
    
    asyncio.get_event_loop().run_until_complete(hello())
    

    可以通过这样来查看自己websocket服务发送的信息,能够更加方便的进行排错
    以上仅为个人学习笔记,谨慎参考

    展开全文
  • 主要介绍了vue 实现websocket发送消息并实时接收消息,项目结合vue脚手架和websocket来搭建,本文给大家分享实例代码,需要的朋友可以参考下
  • (怎么确定A_server接收不到消息忽略) 页面布局是index.html嵌套IFRAME,IFRAME页面展示书籍内容。 websocket是在index页面进行初始化,保存后在IFRAME页面直接调用websocket.send(message),子页面是无法直接调用父...

    问题场景

    客户端A点击制作书籍,跳转到服务B进行制作书籍,服务B点击保存书籍后,需要通知服务A进行页面刷新。现在问题是客户端A不能进行同步刷新。

    服务关系图

    在这里插入图片描述

    B_clinet保存后无法发送消息到A_server

    (怎么确定A_server接收不到消息忽略)
    页面布局是index.html嵌套IFRAME,IFRAME页面展示书籍内容。
    websocket是在index页面进行初始化,保存后在IFRAME页面直接调用websocket.send(message),子页面是无法直接调用父页面对象的。
    需要加上window.parent.xxx进行调用

    A_server接收到消息后进行转发到A_clinet

    B_clinet发送消息到A_server已经解决了,这时A_server就可以接收到消息,
    A_server对消息事件进行广播。
    但是A_clinet却接收不到消息,偶尔能接收到,通过console打印日志,发现创建和关闭能正常打印,唯独消息监听不能打印(具体原因不详)。
    现在就非常奇怪了,页面加载完成之后偶尔能接收到消息,接收到消息后,不多久又不能接收消息!感觉像断开了连接一样。
    有了这个想法就开始测试,在error和close方法中调用一个reconnect方法重新连接,果然消息能正常接收。

    结论:websocket接收到消息后容易断开连接。

    展开全文
  • 系统使用websocket 访问远程上的实时数据,但是有时候会停止更新实时数据,是因为远程服务器重启导致的吗?有没有可能是其他问题呢? 只要我们重启了自己的系统,就会继续更新数据了。
  • 我使用uniapp开发支付宝+微信小程序,websocket中用了stomp.js做订阅,用支付宝真机测试websocket时...后续调试发现,因为页面跳转导致uni.onSocketMessage监听不到消息。 于是还原场景: 在App.vue中写了全局的we...

    我使用uniapp开发支付宝+微信小程序,websocket中用了stomp.js做订阅,用支付宝真机测试websocket时发现消息监听不到了,导致接口唤起了,但是收不到后续的回调。微信IDEA与支付宝IDEA没问题,微信真机也没问题,只有支付宝真机有问题。

    后续调试发现,因为页面跳转导致uni.onSocketMessage监听不到消息。

    于是还原场景:

    在App.vue中写了全局的websocket,小程序启动页为login登录页面,登录成功后跳转首页,使用了switchTab跳转,支付宝小程序说switchTab会关闭其他页面,我发现用reLaunch或者redirectTo页会出现这样的问题

    应该是支付宝真机上页面栈与全局的websocket有冲突,具体哪里冲突我也没有深入了解。

    如果你也和我一样的问题的话,可以在switchTab、reLaunch、redirectTo后的页面手动关闭一次websocket,但是我发现用uni.closeSocket无法重启websocket。于是我用了stomp的订阅关闭。别的页面需要调用到App.vue中的属性,我只能在App.vue中定义一个全局变量globleData,在别的页面调用。

    上代码:

    App.vue

    <script>
    	export default {
    		onLaunch: function() {
    			this.initSocket()
    		},
    		onShow: function() {},
    		onHide: function() {},
    		globalData: {
    			stompClient: '', //后续页面需要用到
    			restart: '' //因为回到登录页重启会出现2个监听,回调会重复,所以需要手动连接
    		},
    		methods: {
    			//获取Stmop消息推送
    			initSocket() {
    				var that = this;
    				// socket是否连接
    				var socketConnected = false;
    				// 待发送的消息队列
    				var messageQueue = [];
    				// 是否断线重连
    				var reconnect = true;
    				var openid = uni.getStorageSync('token');
    				// // 发送消息
    				function sendSocketMessage(msg) {
    					console.log(msg);
    					//如果socket已连接则发送消息
    					if (socketConnected) {
    						uni.sendSocketMessage({
    							data: msg
    						})
    					} else {
    						// socket没有连接将消息放入队列中
    						messageQueue.push(msg);
    					}
    				}
    
    				// 关闭连接
    				function close() {
    					if (socketConnected) {
    						uni.closeSocket()
    					}
    				}
    
    				// 符合WebSocket定义的对象
    				var ws = {
    					send: sendSocketMessage,
    					close: close
    				}
    
    				// 创建一个 WebSocket 连接
    
    				function connect() {
    					console.log(uni.getStorageSync('token'))
    					openid = uni.getStorageSync('token');
    					uni.connectSocket({
    						url: '你的websocket地址',
    						header: {
    							'content-type': 'application/json'
    						},
    						success(res) {
    							console.log(res)
    						}
    					})
    				}
    				connect()
    				// 监听 WebSocket 连接打开事件
    				uni.onSocketOpen(function(res) {
    					console.log("WebSocket 连接成功")
    					socketConnected = true;
    					ws.onopen();
    					//连接成功后,将队列中的消息发送出去
    
    				})
    
    				// 监听 WebSocket 接受到服务器的消息事件
    				uni.onSocketMessage(function(res) {
    					ws.onmessage(res);
    				})
    
    				// 监听 WebSocket 错误事件
    				uni.onSocketError(function(res) {
    					console.log("WebSocket 错误事件")
    				})
    
    				// 监听 WebSocket 连接关闭事件
    				uni.onSocketClose(function(res) {
    					console.log("WebSocket 连接关闭")
    					socketConnected = false;
    					// 断线重连
    					if (reconnect) {
    						connect();
    					}
    				})
    
    				var Stomp = require('common/SDK/stomp.min.js').Stomp;
    
    				/**
    				 * 定期发送心跳或检测服务器心跳
    				 *  The heart-beating is using window.setInterval() to regularly send heart-beats and/or check server heart-beats.
    				 *  可看stomp.js的源码(195,207,489行),由于小程序没有window对象,所以我们要调用小程序的定时器api实现
    				 */
    				Stomp.setInterval = function(interval, f) {
    					return setInterval(f, interval);
    				};
    				// 结束定时器的循环调用
    				Stomp.clearInterval = function(id) {
    					return clearInterval(id);
    				};
    
    				var stompClient = Stomp.over(ws);
    				that.$scope.globalData.stompClient = stompClient
    
    				stompClient.connect({}, function(callback) {
    					console.log(uni.getStorageSync('token'))
    
    					stompClient.subscribe('/user/' + openid + '/equipment', function(body, headers) {
    						console.log('收到webSocket回调', body);
    						var res = JSON.parse(body.body);
    
    					});
    				})
    			},
    		},
    	}
    </script>
    

    home.vue SwichTab的首页

    <script>
        export default{
            onLoad() {
    			getApp().globalData.stompClient.disconnect( function(){
    				console.log('订阅连接关闭') //此处关闭订阅,websocket会重新连接,disconnect是stomp的关闭连接
    			})
    			getApp().globalData.restart = true //因为回到登录页不会重新连接,得手动,所以给个状态通知登录页
    		},
        }
    </script>

    Login.vue 项目的启动页

    <script>
    export default{
        onLoad(){
                getApp().globalData.stompClient.disconnect( function(){
    				console.log('订阅连接关闭') //此处关闭连接,websocket不会再打开,因为是首页redirectTo过来的。所以需要手动再开一次,不需要再调onSocketMessage,会出现2次重复监听,所以只需要手动打开Socket连接就可以了
    				if(getApp().globalData.restart){
    					uni.connectSocket({
    						url: '你的websocket地址',
    						header: {
    						  'content-type': 'application/json'
    						},
    						success(res){
    							console.log(res)
    						}
    					})
    				}
    			})
        }
    }
    </script>

     

    展开全文
  • WebSocket接收完整消息

    千次阅读 2019-10-14 08:10:55
    WebSocket接收完整消息 //拓展方法(静态类中) public static async System.Threading.Tasks.Task<MsgInfo> ReceiveMsg(this System.Net.WebSockets.WebSocket ws, int Capacity = 1024 * 1024 * 1) { ...

    WebSocket接收完整消息

    		//拓展方法(静态类中)
    		public static async System.Threading.Tasks.Task<MsgInfo> ReceiveMsg(this System.Net.WebSockets.WebSocket ws, int Capacity = 1024 * 1024 * 1)
            {
                //容器,至多只能保存初始化大小的信息
                //Capacity必须大于0,否者代码在执行到这里,前端websocket会断开
                ArraySegment<byte> buffer = new ArraySegment<byte>(new byte[Capacity]);
                //初始定义化消息结果类,主要是将result.EndOfMessage设为false
                WebSocketReceiveResult result = new WebSocketReceiveResult(0, WebSocketMessageType.Binary, false);
                //用于保存完整消息的所有片段
                List<byte[]> Message = new List<byte[]>();
                //消息未完全接收,用于接收完整的消息
                while (!result.EndOfMessage)
                {
                    //接收消息
                    result = await ws.ReceiveAsync(buffer, System.Threading.CancellationToken.None);
                    Message.Add(buffer.Take(result.Count).ToArray());//保存消息片段
                }
                byte[] temp = new byte[0];//储存完整消息的容器
                Message.ForEach(u => temp = temp.Concat(u).ToArray());//将所有消息片段进行整合(提取实际数据)
                buffer = new ArraySegment<byte>(temp);//将完整消息保存到容器中(buffer)
                //MsgInfo,自写类
                return new MsgInfo() { Buffer = buffer, Result = result };
            }
    

    希望对正在学习WebSocket的你有所帮助!

    展开全文
  • 一、引入maven配置: <dependency> <groupId>org.springframework....spring-boot-starter-websocket</artifactId> </dependency> 二、config配置: import org.springframewor
  • 没有在和发消息的人在聊天,此时,收到发消息的人发来的消息。 1.currentSession为空,没在和谁聊天 2.正在聊天的消息来源人,不是currentSession 用户列表加上消息提示(小红点) 调整为: 用户...
  • 这是一个java web项目集成了netty websocket的完整代码。java web项目作为服务器端和客户端进行数据通信。但是常常存在提示Max frame length of 65536 has been exceeded问题。初始化握手对象时指定了...
  • 目录 1.问题 2.处理 3.方法 3.1vue前端 3.2java后端 ...最近在研究websocket前后端...下一次我发送S1,后端因为还在执行上次的任务,接收不到我这次的请求参数,数据就没法更新成S1的数据 2.处理 经过思考,我将.
  • 1、创建页面时即生效 我写在了首页,保证一进入... // 连接webSocket,用于接收后台实时报警信息推送 this.webSocket(); }, 2、websocket具体操作 methods: { webSocket() { const that = this; if (typeof...
  • 采用WebSocket传递消息,临时做个demo来测试场景。 1、首先写js中的部分代码: //通讯“套接字” var socket; switchLCBFun(); function switchLCBFun() { //var host = "ws://" + $("#HFCtrlIP").val() + ":" ...
  • Springboot+WebSocket实现在线接收消息

    千次阅读 2020-01-18 22:58:47
    写项目的时候写了客户给前台发消息,考虑前台要实时获取信息的情况,通过思考(百度),意识可能要用到如题。 本来打算学习MQTT来考虑消息推送的事情,但是种种原因(懒)暂时放弃。 1 Java API for ...
  • electron win32应用,写了一个打印组件,通过websocket通信。 前端vue连上socket,报错 Access to XMLHttpRequest at ‘http://127.0.0.1:18099/socket.io/?EIO=3&transport=polling&t=NoJMJCk’ from ...
  • 本来想用websocket做一个消息推送 可是分布式环境下支持session共享因为服务器不同 所以采用 rabbitMQ+webSocket实现分布式消息推送 生产者将消息 发送给 rabbitMQ 的 virtual-host:/(顶极路由) 再由它路由...
  • 我用if(e) alert(‘abc’)判断e里面什么也没接受 但是服务器给我发 字符串 或者base64 都可以接收到这是为什么 难道websocket不支持接收 二进制数据吗 还是 我接收的方式不对。
  • WebSocket长连接实现聊天IM 接收发送消息,百分百能用
  • webSocketClient发送消息 @Override public void sendStardMessage(int function, int type, String message) { Log.i("function:type:message:", String.valueOf(function)+","+String.valueOf(type)+","+...
  • 多个 socket.send方法不要并行放在一起,会线程冲突
  • 初学websocket websocket发送页面,接受页面都开着消息能发送,能接收,要是接收的页面没有开着,在发送消息,打开接收页面就接收不到了,怎么解决?
  • Android WebSocket连接成功

    千次阅读 2017-05-24 15:45:27
    消息推送时,长连接的使用(websocket) 在这里使用okhttp,但是注意不要忘记在gradle app中添加 compile 'org.java-websocket:Java-WebSocket:1.3.0' compile '...
  • websocket接收消息推送+语音提示 这个是同事的代码,我拿来记录一下,希望以后可以看得懂…… utils/websocket.js const audioUrl = require('@/assets/remind-music/remind.mp3') export default { install: ...
  • 一、新建webSocket.js: import { Message } from 'element-ui'; import router from '../../router'; var lockReconnect = false; //避免ws重复连接 var isReconnect = true; //是否重连 var ws = null; // 判断...
  • ``` handler处理如下 ...package com.amarky.websocket;...import io.netty.handler.codec....socket.onmessage方法接受不到writeAndFlush写回的数据,不知道是什么原因​ ```
  • WebSocket+RabbitMQ实现消息推送系统

    千次阅读 2021-09-18 02:44:08
    一、用户获取新的消息通知有两种模式 ...向指定用户发送WebSocket消息并处理对方在线的情况 给指定用户发送消息: 如果接收者在线,则直接发送消息; 否则将消息存储redis,等用户上线后主动拉取未读消息。 ...
  • 理论上前台应该发送消息到/api/test时Controller类应该能接收到消息,但是发送消息后未能进入controller类 html就贴了,js前端代码如下 ``` window.onload=function(){ var sockJs=new SockJS("/stomp");...
  • vue websocket 发送消息

    2021-04-06 09:17:48
    发送消息的页面: 效果: 选中的用户,背景变效果为淡色。 vue: 如果session存在,判断Session中存在的用户的用户名,如果存在,返回false 点击用户,选中的用户的session 保存聊天记录 发送...
  • 本例子分为客户端(就是android手机),网页端为后台服务器。可以实现网页消息推送手机,手机也可发消息到网页,很好的实现了消息的同步,不会有延迟,刷新现象。可以实现网页微信,二维码扫描登陆,聊天室等等。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 36,409
精华内容 14,563
关键字:

websocket收不到消息