14
A
回答
29
關於Clojure的好處是你擁有所有這些優秀的庫,像JVM,如netty,這些JVM經過高度優化,可配置和深思熟慮。像這樣的東西應該讓你去:
(ns netty
(:gen-class)
(:import
[java.net InetSocketAddress]
[java.util.concurrent Executors]
[org.jboss.netty.bootstrap ServerBootstrap]
[org.jboss.netty.channel Channels ChannelPipelineFactory
SimpleChannelHandler]
[org.jboss.netty.channel.socket.nio NioServerSocketChannelFactory]
[org.jboss.netty.buffer ChannelBuffers]))
(declare make-handler)
(defn start
"Start a Netty server. Returns the pipeline."
[port handler]
(let [channel-factory (NioServerSocketChannelFactory.
(Executors/newCachedThreadPool)
(Executors/newCachedThreadPool))
bootstrap (ServerBootstrap. channel-factory)
pipeline (.getPipeline bootstrap)]
(.addLast pipeline "handler" (make-handler))
(.setOption bootstrap "child.tcpNoDelay", true)
(.setOption bootstrap "child.keepAlive", true)
(.bind bootstrap (InetSocketAddress. port))
pipeline))
(defn make-handler
"Returns a Netty handler."
[]
(proxy [SimpleChannelHandler] []
(channelConnected [ctx e]
(let [c (.getChannel e)]
(println "Connected:" c)))
(channelDisconnected [ctx e]
(let [c (.getChannel e)]
(println "Disconnected:" c)))
(messageReceived [ctx e]
(let [c (.getChannel e)
cb (.getMessage e)
msg (.toString cb "UTF-8")]
(println "Message:" msg "from" c)))
(exceptionCaught
[ctx e]
(let [throwable (.getCause e)]
(println "@exceptionCaught" throwable))
(-> e .getChannel .close))))
相關問題
- 1. 使用碼頭服務器,遠程服務器進行調試
- 2. 使用Python進行網絡編程 - TCP客戶端/服務器
- 3. 在Clojure REST服務中使用Aviso Rook進行驗證
- 4. 對緩存服務器進行編碼
- 5. 使用WebSocket進行服務器 - 服務器通信
- 6. 使用AngularJS進行服務器輪詢
- 7. 使用JavaScript進行服務器輪詢
- 8. 多線程Clojure Luminus服務器?
- 9. 如何在Windows中開始使用Clojure進行編程?
- 10. C#+使用.xsd和.xml文件對Web服務進行編程
- 11. Clojure OAuth 2服務器庫
- 12. 使用Python進行套接字編程:獲取服務器的端口
- 13. 使用OPC UA協議在python中進行服務器端客戶端編程
- 14. 使用WCF服務進行Windows移動和服務器通信?
- 15. 對BLE信標進行編程以連接服務器
- 16. 用Java以編程方式終止硒服務器進程
- 17. 使用Netbeans在遠程服務器上進行熱部署
- 18. 使用進程在客戶端服務器上執行utl_recomp
- 19. 使用EJB並行化幾臺服務器上的進程
- 20. iOS,使用RestKit進行遠程服務器搜索
- 21. 使用Visual Studio和WinDbg服務器進行遠程調試
- 22. ASP.NET MVC - 使用構建服務器進行遠程調試
- 23. 進行服務器端編程時需要多少客戶端編程?
- 24. 在Android應用程序中進行遠程服務器調用
- 25. 遠程進入服務器
- 26. 進程外COM服務器
- 27. valgrind在服務器進程
- 28. 在服務器上的後臺進程中運行進程
- 29. 使用Clojure Ring服務二進制內容
- 30. C http服務器編程
你指的是c10k問題? http://www.kegel.com/c10k.html – 2009-11-14 22:17:23
我讀過,是的,我很好奇它是如何在這個有趣的語言中實現的。請注意,clojure廣泛宣傳其併發功能。 – Roskoto 2009-11-14 22:26:12