admin管理员组文章数量:1022752
I am fairly new with Spring websocket. I have a simple demo below:
HandshakeInterceptor class:
public class HandshakeInterceptor extends HttpSessionHandshakeInterceptor {
private static final Log logger = LogFactory
.getLog(HandshakeInterceptor.class);
@Override
public boolean beforeHandshake(ServerHttpRequest request,
ServerHttpResponse response, WebSocketHandler wsHandler,
Map<String, Object> attributes) throws Exception {
logger.info("Before Handshake");
return super.beforeHandshake(request, response, wsHandler, attributes);
}
@Override
public void afterHandshake(ServerHttpRequest request,
ServerHttpResponse response, WebSocketHandler wsHandler,
Exception ex) {
logger.info("After Handshake");
super.afterHandshake(request, response, wsHandler, ex);
}
}
WebsocketEndPoint class:
public class WebsocketEndPoint extends TextWebSocketHandler {
private static final Log logger = LogFactory
.getLog(WebsocketEndPoint.class);
@Override
protected void handleTextMessage(WebSocketSession session,
TextMessage message) throws Exception {
super.handleTextMessage(session, message);
logger.info("Recieved Message: " + message.getPayload());
TextMessage returnMessage = new TextMessage(message.getPayload()
+ " received at server");
logger.info("Return Message: " + returnMessage.getPayload());
session.sendMessage(returnMessage);
}
}
Spring mapping websocket:
<bean id="websocket"
class=".n9.api.websocket.handler.WebsocketEndPoint" />
<websocket:handlers>
<websocket:mapping path="/websocket" handler="websocket" />
<websocket:handshake-interceptors>
<bean
class=".n9.api.websocket.HandshakeInterceptor" />
</websocket:handshake-interceptors>
</websocket:handlers>
Html:
function connect() {
if ('WebSocket' in window){
console.log('Websocket supported');
socket = new WebSocket('ws://localhost:8080/n9-api/websocket');
console.log('Connection attempted');
socket.onopen = function(){
console.log('Connection open!');
}
socket.onclose = function(){
console.log('Disconnecting connection');
}
socket.onmessage = function (evt)
{
var received_msg = evt.data;
console.log(received_msg);
console.log('message received!');
}
} else {
console.log('Websocket not supported');
}
}
function disconnect() {
setConnected(false);
console.log("Disconnected");
}
function sendMessage(message) {
socket.send(JSON.stringify({ 'message': message }));
}
Now i want to send a message to a specific user. I define each device have a deviceId, so i want to know:
- How to handshake with attributes, which will be send from client?
- How to send handshake attributes from client javascript?
- How to send message from server to client by handshake attributes?
Thank you for your attention.
I am fairly new with Spring websocket. I have a simple demo below:
HandshakeInterceptor class:
public class HandshakeInterceptor extends HttpSessionHandshakeInterceptor {
private static final Log logger = LogFactory
.getLog(HandshakeInterceptor.class);
@Override
public boolean beforeHandshake(ServerHttpRequest request,
ServerHttpResponse response, WebSocketHandler wsHandler,
Map<String, Object> attributes) throws Exception {
logger.info("Before Handshake");
return super.beforeHandshake(request, response, wsHandler, attributes);
}
@Override
public void afterHandshake(ServerHttpRequest request,
ServerHttpResponse response, WebSocketHandler wsHandler,
Exception ex) {
logger.info("After Handshake");
super.afterHandshake(request, response, wsHandler, ex);
}
}
WebsocketEndPoint class:
public class WebsocketEndPoint extends TextWebSocketHandler {
private static final Log logger = LogFactory
.getLog(WebsocketEndPoint.class);
@Override
protected void handleTextMessage(WebSocketSession session,
TextMessage message) throws Exception {
super.handleTextMessage(session, message);
logger.info("Recieved Message: " + message.getPayload());
TextMessage returnMessage = new TextMessage(message.getPayload()
+ " received at server");
logger.info("Return Message: " + returnMessage.getPayload());
session.sendMessage(returnMessage);
}
}
Spring mapping websocket:
<bean id="websocket"
class=".n9.api.websocket.handler.WebsocketEndPoint" />
<websocket:handlers>
<websocket:mapping path="/websocket" handler="websocket" />
<websocket:handshake-interceptors>
<bean
class=".n9.api.websocket.HandshakeInterceptor" />
</websocket:handshake-interceptors>
</websocket:handlers>
Html:
function connect() {
if ('WebSocket' in window){
console.log('Websocket supported');
socket = new WebSocket('ws://localhost:8080/n9-api/websocket');
console.log('Connection attempted');
socket.onopen = function(){
console.log('Connection open!');
}
socket.onclose = function(){
console.log('Disconnecting connection');
}
socket.onmessage = function (evt)
{
var received_msg = evt.data;
console.log(received_msg);
console.log('message received!');
}
} else {
console.log('Websocket not supported');
}
}
function disconnect() {
setConnected(false);
console.log("Disconnected");
}
function sendMessage(message) {
socket.send(JSON.stringify({ 'message': message }));
}
Now i want to send a message to a specific user. I define each device have a deviceId, so i want to know:
- How to handshake with attributes, which will be send from client?
- How to send handshake attributes from client javascript?
- How to send message from server to client by handshake attributes?
Thank you for your attention.
Share Improve this question edited Jun 6, 2014 at 4:17 codeaholicguy asked Jun 6, 2014 at 4:05 codeaholicguycodeaholicguy 1,6911 gold badge11 silver badges18 bronze badges1 Answer
Reset to default 4You can use the session is to save the deviceId
session.setAttribute("deviceId",deviceId);
And in the HandshakeInterceptor.java
if (request instanceof ServletServerHttpRequest) {
ServletServerHttpRequest servletRequest = (ServletServerHttpRequest) request;
HttpSession session = servletRequest.getServletRequest().getSession(false);
if (session != null) {
String deviceId= (String) session.getAttribute("deviceId");
attributes.put("websockt_deviceId",deviceId);
}
}
In the WebsocketEndPoint.java,you need a method like
private static final ArrayList<WebSocketSession> sessions;
public void sendMessageToUser(String deviceId, TextMessage message) {
for (WebSocketSession session: sessions) {
if (session.getAttributes().get("websockt_deviceId").equals(deviceId)) {
try {
if (session.isOpen()) {
session.sendMessage(message);
}
} catch (IOException e) {
e.printStackTrace();
}
break;
}
}
}
You can send a message to a specific user from the server
I am fairly new with Spring websocket. I have a simple demo below:
HandshakeInterceptor class:
public class HandshakeInterceptor extends HttpSessionHandshakeInterceptor {
private static final Log logger = LogFactory
.getLog(HandshakeInterceptor.class);
@Override
public boolean beforeHandshake(ServerHttpRequest request,
ServerHttpResponse response, WebSocketHandler wsHandler,
Map<String, Object> attributes) throws Exception {
logger.info("Before Handshake");
return super.beforeHandshake(request, response, wsHandler, attributes);
}
@Override
public void afterHandshake(ServerHttpRequest request,
ServerHttpResponse response, WebSocketHandler wsHandler,
Exception ex) {
logger.info("After Handshake");
super.afterHandshake(request, response, wsHandler, ex);
}
}
WebsocketEndPoint class:
public class WebsocketEndPoint extends TextWebSocketHandler {
private static final Log logger = LogFactory
.getLog(WebsocketEndPoint.class);
@Override
protected void handleTextMessage(WebSocketSession session,
TextMessage message) throws Exception {
super.handleTextMessage(session, message);
logger.info("Recieved Message: " + message.getPayload());
TextMessage returnMessage = new TextMessage(message.getPayload()
+ " received at server");
logger.info("Return Message: " + returnMessage.getPayload());
session.sendMessage(returnMessage);
}
}
Spring mapping websocket:
<bean id="websocket"
class=".n9.api.websocket.handler.WebsocketEndPoint" />
<websocket:handlers>
<websocket:mapping path="/websocket" handler="websocket" />
<websocket:handshake-interceptors>
<bean
class=".n9.api.websocket.HandshakeInterceptor" />
</websocket:handshake-interceptors>
</websocket:handlers>
Html:
function connect() {
if ('WebSocket' in window){
console.log('Websocket supported');
socket = new WebSocket('ws://localhost:8080/n9-api/websocket');
console.log('Connection attempted');
socket.onopen = function(){
console.log('Connection open!');
}
socket.onclose = function(){
console.log('Disconnecting connection');
}
socket.onmessage = function (evt)
{
var received_msg = evt.data;
console.log(received_msg);
console.log('message received!');
}
} else {
console.log('Websocket not supported');
}
}
function disconnect() {
setConnected(false);
console.log("Disconnected");
}
function sendMessage(message) {
socket.send(JSON.stringify({ 'message': message }));
}
Now i want to send a message to a specific user. I define each device have a deviceId, so i want to know:
- How to handshake with attributes, which will be send from client?
- How to send handshake attributes from client javascript?
- How to send message from server to client by handshake attributes?
Thank you for your attention.
I am fairly new with Spring websocket. I have a simple demo below:
HandshakeInterceptor class:
public class HandshakeInterceptor extends HttpSessionHandshakeInterceptor {
private static final Log logger = LogFactory
.getLog(HandshakeInterceptor.class);
@Override
public boolean beforeHandshake(ServerHttpRequest request,
ServerHttpResponse response, WebSocketHandler wsHandler,
Map<String, Object> attributes) throws Exception {
logger.info("Before Handshake");
return super.beforeHandshake(request, response, wsHandler, attributes);
}
@Override
public void afterHandshake(ServerHttpRequest request,
ServerHttpResponse response, WebSocketHandler wsHandler,
Exception ex) {
logger.info("After Handshake");
super.afterHandshake(request, response, wsHandler, ex);
}
}
WebsocketEndPoint class:
public class WebsocketEndPoint extends TextWebSocketHandler {
private static final Log logger = LogFactory
.getLog(WebsocketEndPoint.class);
@Override
protected void handleTextMessage(WebSocketSession session,
TextMessage message) throws Exception {
super.handleTextMessage(session, message);
logger.info("Recieved Message: " + message.getPayload());
TextMessage returnMessage = new TextMessage(message.getPayload()
+ " received at server");
logger.info("Return Message: " + returnMessage.getPayload());
session.sendMessage(returnMessage);
}
}
Spring mapping websocket:
<bean id="websocket"
class=".n9.api.websocket.handler.WebsocketEndPoint" />
<websocket:handlers>
<websocket:mapping path="/websocket" handler="websocket" />
<websocket:handshake-interceptors>
<bean
class=".n9.api.websocket.HandshakeInterceptor" />
</websocket:handshake-interceptors>
</websocket:handlers>
Html:
function connect() {
if ('WebSocket' in window){
console.log('Websocket supported');
socket = new WebSocket('ws://localhost:8080/n9-api/websocket');
console.log('Connection attempted');
socket.onopen = function(){
console.log('Connection open!');
}
socket.onclose = function(){
console.log('Disconnecting connection');
}
socket.onmessage = function (evt)
{
var received_msg = evt.data;
console.log(received_msg);
console.log('message received!');
}
} else {
console.log('Websocket not supported');
}
}
function disconnect() {
setConnected(false);
console.log("Disconnected");
}
function sendMessage(message) {
socket.send(JSON.stringify({ 'message': message }));
}
Now i want to send a message to a specific user. I define each device have a deviceId, so i want to know:
- How to handshake with attributes, which will be send from client?
- How to send handshake attributes from client javascript?
- How to send message from server to client by handshake attributes?
Thank you for your attention.
Share Improve this question edited Jun 6, 2014 at 4:17 codeaholicguy asked Jun 6, 2014 at 4:05 codeaholicguycodeaholicguy 1,6911 gold badge11 silver badges18 bronze badges1 Answer
Reset to default 4You can use the session is to save the deviceId
session.setAttribute("deviceId",deviceId);
And in the HandshakeInterceptor.java
if (request instanceof ServletServerHttpRequest) {
ServletServerHttpRequest servletRequest = (ServletServerHttpRequest) request;
HttpSession session = servletRequest.getServletRequest().getSession(false);
if (session != null) {
String deviceId= (String) session.getAttribute("deviceId");
attributes.put("websockt_deviceId",deviceId);
}
}
In the WebsocketEndPoint.java,you need a method like
private static final ArrayList<WebSocketSession> sessions;
public void sendMessageToUser(String deviceId, TextMessage message) {
for (WebSocketSession session: sessions) {
if (session.getAttributes().get("websockt_deviceId").equals(deviceId)) {
try {
if (session.isOpen()) {
session.sendMessage(message);
}
} catch (IOException e) {
e.printStackTrace();
}
break;
}
}
}
You can send a message to a specific user from the server
本文标签: javascriptHow to send message to a specific device by spring websocketStack Overflow
版权声明:本文标题:javascript - How to send message to a specific device by spring websocket - Stack Overflow 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://it.en369.cn/questions/1745528672a2154647.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论