小程序websocket java_微信小程序websocket java获取不到data
在使用java作为后台测试微信小程序时,发现:
1.后台中ServerHttpRequest request中的session是空的,前端通过wx.connectSocket传递的data也没看到。
2.可以从前端网后台传递信息,但是后台往前端发送时会报出如下错误
有没有大神能告知下解决方案呢?
Java后台实现WebSocket时一共尝试了两种方案,一种是java+spring,一种是纯spring的,而且两者都会出现上面的情况,同时
其中:
springMVC时报如下错误:
Exception in thread "Thread-21" java.lang.IllegalStateException: The remote endpoint was in state [STREAM_WRITING] which is an invalid state for called method
at org.apache.tomcat.websocket.WsRemoteEndpointImplBase$StateMachine.checkState(WsRemoteEndpointImplBase.java:1225)
at org.apache.tomcat.websocket.WsRemoteEndpointImplBase$StateMachine.textPartialStart(WsRemoteEndpointImplBase.java:1182)
at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendPartialString(WsRemoteEndpointImplBase.java:222)
at org.apache.tomcat.websocket.WsRemoteEndpointBasic.sendText(WsRemoteEndpointBasic.java:49)
at org.springframework.web.socket.adapter.standard.StandardWebSocketSession.sendTextMessage(StandardWebSocketSession.java:197)
at org.springframework.web.socket.adapter.AbstractWebSocketSession.sendMessage(AbstractWebSocketSession.java:104)
at cn.zhonya.WXTalkDome.webSocket.MyWebSocketHandler$1.run(MyWebSocketHandler.java:139)
at java.lang.Thread.run(Thread.java:745)
java+spring时会报如下错误:
java.lang.IllegalStateException: The remote endpoint was in state [WRITER_WRITING] which is an invalid state for called method
at org.apache.tomcat.websocket.WsRemoteEndpointImplBase$StateMachine.checkState(WsRemoteEndpointImplBase.java:1225)
at org.apache.tomcat.websocket.WsRemoteEndpointImplBase$StateMachine.textStart(WsRemoteEndpointImplBase.java:1187)
at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendString(WsRemoteEndpointImplBase.java:190)
at org.apache.tomcat.websocket.WsRemoteEndpointBasic.sendText(WsRemoteEndpointBasic.java:37)
at cn.zhonya.WXTalkDome.webSocket.MyWebSocket.sendMessage(MyWebSocket.java:107)
at cn.zhonya.WXTalkDome.webSocket.MyWebSocket.onMessage(MyWebSocket.java:80)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.tomcat.websocket.pojo.PojoMessageHandlerWholeBase.onMessage(PojoMessageHandlerWholeBase.java:80)
at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:399)
at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:106)
at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:500)
at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:295)
at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:131)
at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:69)
at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:148)
at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:54)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:53)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:785)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1419)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:44)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
java+spring的socket代码如下:
@ServerEndpoint(value = "/websocket2.do",configurator = SpringConfigurator.class)
public class MyWebSocket {
private static int onlineCount = 0;
public MyWebSocket(){
}
@Autowired
private static CopyOnWriteArraySet webSocketSet = new CopyOnWriteArraySet();
private static Logger logger = Logger.getLogger(MyWebSocket.class);
private Session session;
/**
* 链接建立成功调用的方法
* @param session 可选的参数,session为与某个客户端连接的会话,需要通过它来给客户发送数据
*/
@OnOpen
public void onOpen(Session session, @PathParam("user") String user,@PathParam("uid") String uid){
this.session = session;
// session.getAttributes();
logger.info("——————————————");
logger.info("——————————————");
logger.info("——————————————");
logger.info("——————————————");
JSONObject s = new JSONObject(session);
String str= session.getQueryString();
String [] strs = str.split("&");
int slen = strs.length;
for(String quey:strs){
String [] q = quey.split("=");
System.out.println("sing:"+q[0]+" value:"+q[1]);
}
logger.info("webSocketSet————————:"+s.toString());
logger.info("——————————————");
logger.info("——————————————");
logger.info("——————————————");
webSocketSet.add(this);//加入set中
addOnlineCount();//在线人数加1
System.out.println("有新链接加入!当前在线人数为:"+getOnlineCount()+" user:"+user+" uid:"+uid);
}
/**
* 连接关闭调用的方法
*/
@OnClose
public void onClose(){
webSocketSet.remove(this);//从set中删除
subOnlineCount();
System.out.println("有一个连接关闭!当前在线人数为:"+getOnlineCount());
}
@OnMessage
public void onMessage(String message,Session session){
System.out.println("来自客户端的消息:"+message);
//群发消息
for(MyWebSocket item:webSocketSet){
try{
if(item.session == session){
// item.sendMessage("
我说:"+message+" 当前在线人数:"+getOnlineCount()+"
");
item.sendMessage(message);
}else{
item.sendMessage("
"+message+" 当前在线人数:"+getOnlineCount()+"
");
}
}catch (IOException e){
e.printStackTrace();
continue;
}
}
}
@OnError
public void onError(Session session,Throwable error){
System.out.println("发生错误");
error.printStackTrace();
}
/**
* 这个方法与上面几个方法不一样,没有用注解,根据自己需要添加的方法
* @param message
*/
private void sendMessage(String message) throws IOException {
//保存到数据库
// Content content = new Content();
// content.setContent(message);
// content.setCreateDate(StringUtilZ.getTimestampOfNow("yyyy-MM-dd HH:mm:ss"));
this.session.getBasicRemote().sendText(message);
}
public static synchronized int getOnlineCount(){
return onlineCount;
}
public static synchronized void addOnlineCount() {
MyWebSocket.onlineCount++;
}
private static synchronized void subOnlineCount(){
MyWebSocket.onlineCount--;
}
}
springmvc自身的那个文件比较多就不多贴了,暂时贴下那个139行上下的内容
public void broadcast(final TextMessage message)throws IOException {
Iterator> it = userSocketSessionMap
.entrySet().iterator();
//多线程群发
while(it.hasNext()){
final Map.Entry entry = it.next();
if(entry.getValue().isOpen()){
new Thread(new Runnable() {
public void run() {
try{
if(entry.getValue().isOpen()){
entry.getValue().sendMessage(message);
}
} catch (IOException e){
e.printStackTrace();
}
}
}).start();
}
}
}
这两种方法在普通WebSocket中都没问题,换到微信小程序就只能接受客户端消息,没办法将消息从服务器传到客户端。怀疑是不是那个session的问题啊,在小程序中使用获取到的session就是空的了。
小程序websocket java_微信小程序websocket java获取不到data相关推荐
- 微信小程序语音识别java_微信小程序实现语音识别功能
原标题:微信小程序实现语音识别功能 使用小程序实现语音识别功能,由于语音识别可以直接使用各厂家的API接口,并且小程序为腾讯所有,因此考虑到可能的低延时,采用了腾讯提供的免费API接口,准确讲是腾讯语 ...
- 【微信小程序控制硬件⑧ 】微信小程序以 websocket 连接阿里云IOT物联网平台mqtt服务器,封装起来使用就是这么简单!(附带Demo)
[微信小程序控制硬件第1篇 ] 全网首发,借助 emq 消息服务器带你如何搭建微信小程序的mqtt服务器,轻松控制智能硬件! [微信小程序控制硬件第2篇 ] 开始微信小程序之旅,导入小程序Mqtt客户 ...
- 微信小程序开发学习笔记001--认识微信小程序,第一个微信小程序
第一天,认识微信小程序,第一个微信小程序 1.什么是微信小程序? 是h5网页嘛?不是 微信张小龙说: 小程序是一种不需要下载安装即可使用的应用, 它实现了应用"触手可及"的梦想,用 ...
- php小程序地图处理,微信小程序 地图map详解及简单实例
微信小程序 地图map 微信小程序map 地图属性名类型默认值说明longitudeNumber中心经度 latitudeNumber中心纬度 scaleNumber1缩放级别 markersArra ...
- 一个C#程序员学习微信小程序的笔记
一个C#程序员学习微信小程序的笔记 客户端打开小程序的时候,就将代码包下载到本地进行解析,首先找到了根目录的 app.json ,知道了小程序的所有页面. 在这个Index页面就是我们的首页,客户端在 ...
- 友盟分享小程序_iOS分享微信小程序
最近项目中遇到了APP分享微信小程序,记录下来问题,希望能帮助到需要的人 项目中的分享集成的是第三方的友盟,我看了下微信官方的sdk和友盟的小程序分享差不多,于是,就先罗列下友盟的分享 1.首先在微信 ...
- 小程序 php cookie,微信小程序使用Cookie
微信小程序使用Cookie 微信小程序不支持Cookie,因此,需要借助小程序的数据缓存来实现Cookie. 环境: mpvue + fly.js 登录成功后,在处理登录验证的method里,加入以下 ...
- wechat-app-mall — 微信小程序商城,微信小程序微店
简介: wechat-app-mall - 微信小程序商城,微信小程序微店 网盘下载地址: http://kekewangLuo.cc/5Y95XKVEXkL0 图片:
- 我的第一个小程序(Discuz! + 微信小程序)
关于这个小程序 Github : https://github.com/DowneyL/di...' 这个小程序是公司针对一个自家产品的需求,而这个产品就是 Discuz (我知道没啥人用了,就不要吐 ...
最新文章
- Centos用yum安装X Winodw
- 算法实践1_线性回归
- HTML的标签描述18
- RDKit | 基于RDKit探索ChEMBL数据库中合成药物历史
- 滴滴开源支撑业务代码重构工具Rdebug
- 关于MySQL线程池,这也许是目前最全面的实用帖!(转载)
- python深度神经网络量化_深度神经网络数据集大小
- C语言学习笔记---指向函数的指针
- php自动生产静态页
- db2 查看表结构_数据库结构文档的生成利器
- 从键盘输入5个学生每科分数,把分数保存到一个数组中,最后输出分数大于60分的成绩
- sun java认证真题,sun scjp考试心得_java认证
- twaver html5 2d demo,TWaver 2D+GIS+3D的试用和在线Demo
- vscode 初始化HTML结构
- 落魄前端,整理给自己的前端知识体系复习大纲(上篇,2w字)
- tp6 导入excel文件
- ubuntu占用空间清理
- pic16F877A音乐盒c语言,基于PIC16F877A单片机的混沌信号发生器的设计
- H.264码流结构及JM8.6中码流的产生步骤
- Java8时间校正器