मैं क्लोजर के माध्यम से नेटटी का उपयोग करने की कोशिश कर रहा हूं। मैं सर्वर को स्टार्टअप करने में सक्षम हूं, हालांकि, यह एक स्वीकृत सॉकेट शुरू करने में विफल रहता है। नीचे क्रमशः त्रुटि संदेश और कोड हैं। क्या किसी को पता है कि क्या गलत है या गलत हो सकता है? मुझे विश्वास है कि यह मुद्दा (Channels/pipeline (server-handler))
धन्यवाद है।जावा इंटरऑप - नेटटी + क्लोजर
त्रुटि संदेश
#<NioServerSocketChannel [id: 0x01c888d9, /0.0.0.0:843]>
Jun 6, 2012 12:15:35 PM org.jboss.netty.channel.socket.nio.NioServerSocketPipelineSink
WARNING: Failed to initialize an accepted socket.
java.lang.IllegalArgumentException: No matching method found: pipeline
project.clj
(defproject protocol "1.0.0-SNAPSHOT"
:description "Upload Protocol Server"
:dependencies [
[org.clojure/clojure "1.2.1"]
[io.netty/netty "3.4.5.Final"]])
core.clj
(ns protocol.core
(: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)))
(def policy
"<content>Test</content>")
(defn server-handler
"Returns netty handler."
[]
(proxy [SimpleChannelHandler] []
(messageReceived [ctx e]
(let [ch (.getChannel e)]
(.write ch policy)
(.close ch)))
(channelConnected [ctx e]
(let [ch (.getChannel e)]
(.write ch policy)
(.close ch)))
(exceptionCaught [ctx e]
(let [ex (.getCause e)]
(println "Exception" ex)
(-> e .getChannel .close)))))
(defn setup-pipeline
"Returns channel pipeline."
[]
(proxy [ChannelPipelineFactory] []
(getPipeline []
(Channels/pipeline (server-handler)))))
(defn startup
"Starts netty server."
[port]
(let [channel-factory (NioServerSocketChannelFactory. (Executors/newCachedThreadPool) (Executors/newCachedThreadPool))
bootstrap (ServerBootstrap. channel-factory)]
(.setPipelineFactory bootstrap (setup-pipeline))
(.setOption bootstrap "child.tcpNoDelay" true)
(.setOption bootstrap "child.keepAlive" true)
(.bind bootstrap (InetSocketAddress. port))))
स्पष्ट और विस्तृत स्पष्टीकरण के लिए धन्यवाद, यह बहुत उपयोगी था। मैं निश्चित रूप से, एलेफ की कोशिश करने की योजना बना रहा हूं, लेकिन मुझे लगा कि मुझे एक पत्थर के साथ दो पक्षी मिलेंगे - क्लोजर का अभ्यास करते समय नेटटी सीखें। – Ari