rocketmq-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From wenf...@apache.org
Subject [rocketmq-client-go] branch native updated: feat: use pool for header codec (#361)
Date Mon, 06 Jan 2020 02:02:00 GMT
This is an automated email from the ASF dual-hosted git repository.

wenfeng pushed a commit to branch native
in repository https://gitbox.apache.org/repos/asf/rocketmq-client-go.git


The following commit(s) were added to refs/heads/native by this push:
     new 1fbd400  feat: use pool for header codec (#361)
1fbd400 is described below

commit 1fbd4004b842dc94474c69265d20d734717ec81f
Author: xujianhai666 <52450794+xujianhai666@users.noreply.github.com>
AuthorDate: Mon Jan 6 10:01:54 2020 +0800

    feat: use pool for header codec (#361)
    
    Closes #360
---
 internal/remote/remote_client.go |  5 +++--
 primitive/pool.go                | 40 ++++++++++++++++++++++++++++++++++++++++
 2 files changed, 43 insertions(+), 2 deletions(-)

diff --git a/internal/remote/remote_client.go b/internal/remote/remote_client.go
index ce35c6c..b5ad436 100644
--- a/internal/remote/remote_client.go
+++ b/internal/remote/remote_client.go
@@ -135,8 +135,8 @@ func (c *remotingClient) connect(ctx context.Context, addr string) (*tcpConnWrap
 
 func (c *remotingClient) receiveResponse(r *tcpConnWrapper) {
 	var err error
-	header := make([]byte, 4)
-	defer c.closeConnection(r)
+	header := primitive.GetHeader()
+	defer primitive.BackHeader(header)
 	for {
 		if err != nil {
 			if r.isClosed(err) {
@@ -169,6 +169,7 @@ func (c *remotingClient) receiveResponse(r *tcpConnWrapper) {
 		}
 
 		buf := make([]byte, length)
+
 		_, err = io.ReadFull(r, buf)
 		if err != nil {
 			if r.isClosed(err) {
diff --git a/primitive/pool.go b/primitive/pool.go
new file mode 100644
index 0000000..5f729e7
--- /dev/null
+++ b/primitive/pool.go
@@ -0,0 +1,40 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package primitive
+
+import (
+	"sync"
+)
+
+var headerPool = sync.Pool{}
+
+func init() {
+	headerPool.New = func() interface{} {
+		return make([]byte, 4)
+	}
+}
+
+func GetHeader() []byte {
+	d := headerPool.Get().([]byte)
+	//d = (d)[:0]
+	return d
+}
+
+func BackHeader(d []byte) {
+	headerPool.Put(d)
+}


Mime
View raw message