原代码:
session.getAsyncRemote().sendText(message);
问题分析:
程序定时向用户发生消息,存在调用sendText方法向A用户发送第一条消息还未结束,继续调用sendText方法向A用户发送第二条消息的情况。此时就会报错java.lang.IllegalStateException: The remote endpoint was in state。
解决方法:
使用synchronized()锁住此session,使此session在调用结束时再进行第二次调用
改进后的代码:
synchronized(session){
session.getAsyncRemote().sendText(message);
}
参考:
https://bitbucket.org/pjtr/jmeter-websocket-samplers/issues/122/the-remote-endpoint-was-in-state#:~:text=lang.IllegalStateException%3A%20The%20remote%20endpoint%20was%20in%20state%20%5BTEXT_PARTIAL_WRITING%5D,is%20present%20whether%20I%20re-use%20the%20websocket%20connection.