Created
September 30, 2012 07:07
-
-
Save gakuzzzz/3806119 to your computer and use it in GitHub Desktop.
ThreadSafe jetty server
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.yuroyoro.websocket | |
import javax.servlet.http._ | |
import org.eclipse.jetty.websocket._ | |
import org.eclipse.jetty.websocket.WebSocket.Outbound | |
import java.util.concurrent.atomic._ | |
class ChatServlet extends WebSocketServlet { | |
val clients = new AtomicReference[Set[ChatWebSocket]](Set()) | |
override def doGet(req:HttpServletRequest, res:HttpServletResponse ) = | |
getServletContext.getNamedDispatcher("default").forward(req, res) | |
override def doWebSocketConnect(req:HttpServletRequest, protocol:String ) = | |
new ChatWebSocket | |
class ChatWebSocket extends WebSocket { | |
@volatile var outbound:Outbound = _ | |
override def onConnect(outbound:Outbound ) = { | |
this.outbound = outbound | |
clients.lazySet(clients.get + this) | |
onMessage( 0, "WebSocket is success!!!"); | |
} | |
override def onMessage(frame:Byte, data:Array[Byte], offset:Int, length:Int ) = {} | |
override def onMessage(frame:Byte, data:String ) = | |
clients.get.foreach{ c => c.outbound.sendMessage( frame, data ) } | |
override def onDisconnect = clients.lazySet(clients.get - this) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Haskell の場合は、このCASループの様なことを内部的にやってくれる STM っていうモナドがあったりします。