From e7a99dc2a9f772677956e775beba86518cbc2614 Mon Sep 17 00:00:00 2001 From: "william.liangf" Date: Tue, 1 Nov 2011 06:35:22 +0000 Subject: [PATCH] =?UTF-8?q?multicast=E5=A2=9E=E5=8A=A0\n=E7=BB=93=E6=9D=9F?= =?UTF-8?q?=E7=AC=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://code.alibabatech.com/svn/dubbo/trunk@158 1a56cb94-b969-4eaa-88fa-be21384802f2 --- .../registry/multicast/MulticastRegistry.java | 31 ++++++++++++++----- .../multicast/MulticastRegistryTest.java | 1 - 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/dubbo-registry-multicast/src/main/java/com/alibaba/dubbo/registry/multicast/MulticastRegistry.java b/dubbo-registry-multicast/src/main/java/com/alibaba/dubbo/registry/multicast/MulticastRegistry.java index b0e56b1220..66ca22ef9c 100644 --- a/dubbo-registry-multicast/src/main/java/com/alibaba/dubbo/registry/multicast/MulticastRegistry.java +++ b/dubbo-registry-multicast/src/main/java/com/alibaba/dubbo/registry/multicast/MulticastRegistry.java @@ -21,6 +21,7 @@ import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.MulticastSocket; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import com.alibaba.dubbo.common.URL; @@ -64,16 +65,21 @@ public class MulticastRegistry extends AbstractRegistry { mutilcastSocket.joinGroup(mutilcastAddress); Thread thread = new Thread(new Runnable() { public void run() { - byte[] buf = new byte[1024]; + byte[] buf = new byte[2048]; DatagramPacket recv = new DatagramPacket(buf, buf.length); while (true) { try { mutilcastSocket.receive(recv); String msg = new String(recv.getData()).trim(); + int i = msg.indexOf('\n'); + if (i > 0) { + msg = msg.substring(0, i).trim(); + } if (logger.isInfoEnabled()) { logger.info("Receive multicast message: " + msg + " from " + recv.getSocketAddress()); } MulticastRegistry.this.receive(msg, (InetSocketAddress) recv.getSocketAddress()); + Arrays.fill(buf, (byte)0); } catch (IOException e) { logger.error(e.getMessage(), e); } @@ -140,10 +146,11 @@ public class MulticastRegistry extends AbstractRegistry { private void broadcast(String msg) { if (logger.isInfoEnabled()) { - logger.info("Send multicast message: " + msg + " to " + mutilcastAddress + ":" + mutilcastSocket.getLocalPort()); + logger.info("Send broadcast message: " + msg + " to " + mutilcastAddress + ":" + mutilcastSocket.getLocalPort()); } try { - DatagramPacket hi = new DatagramPacket(msg.getBytes(), msg.length(), mutilcastAddress, mutilcastSocket.getLocalPort()); + byte[] data = (msg + "\n").getBytes(); + DatagramPacket hi = new DatagramPacket(data, data.length, mutilcastAddress, mutilcastSocket.getLocalPort()); mutilcastSocket.send(hi); } catch (Exception e) { throw new IllegalStateException(e.getMessage(), e); @@ -152,10 +159,11 @@ public class MulticastRegistry extends AbstractRegistry { private void unicast(String msg, URL url) { if (logger.isInfoEnabled()) { - logger.info("Send udp message: " + msg + " to " + url.getAddress()); + logger.info("Send unicast message: " + msg + " to " + url.getAddress()); } try { - DatagramPacket hi = new DatagramPacket(msg.getBytes(), msg.length(), InetAddress.getByName(url.getHost()), mutilcastSocket.getLocalPort()); + byte[] data = (msg + "\n").getBytes(); + DatagramPacket hi = new DatagramPacket(data, data.length, InetAddress.getByName(url.getHost()), mutilcastSocket.getLocalPort()); mutilcastSocket.send(hi); } catch (Exception e) { throw new IllegalStateException(e.getMessage(), e); @@ -189,12 +197,19 @@ public class MulticastRegistry extends AbstractRegistry { } public boolean isAvailable() { - return mutilcastSocket.isConnected(); + try { + return mutilcastSocket.isConnected(); + } catch (Throwable t) { + return false; + } } - @Override public void destroy() { - mutilcastSocket.close(); + try { + mutilcastSocket.close(); + } catch (Throwable t) { + logger.warn(t.getMessage(), t); + } } } \ No newline at end of file diff --git a/dubbo-registry-multicast/src/test/java/com/alibaba/dubbo/registry/multicast/MulticastRegistryTest.java b/dubbo-registry-multicast/src/test/java/com/alibaba/dubbo/registry/multicast/MulticastRegistryTest.java index a48857290d..2fae149603 100644 --- a/dubbo-registry-multicast/src/test/java/com/alibaba/dubbo/registry/multicast/MulticastRegistryTest.java +++ b/dubbo-registry-multicast/src/test/java/com/alibaba/dubbo/registry/multicast/MulticastRegistryTest.java @@ -92,7 +92,6 @@ public class MulticastRegistryTest { */ @Test public void testSubscribe() { - final String subscribearg = "arg1=1&arg2=2"; // verify lisener. final AtomicReference> args = new AtomicReference>(); registry.subscribe(consumerUrl, new NotifyListener() {