test[http]: http server的使用示例

This commit is contained in:
godotg
2022-09-28 15:36:15 +08:00
parent ef1a41d4eb
commit 67a7279f58
5 changed files with 197 additions and 0 deletions
@@ -0,0 +1,48 @@
/*
* Copyright (C) 2020 The zfoo Authors
* Licensed 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 com.zfoo.net.core.http;
import com.zfoo.net.NetContext;
import com.zfoo.net.packet.http.HttpHelloRequest;
import com.zfoo.net.packet.http.HttpHelloResponse;
import com.zfoo.net.router.attachment.HttpAttachment;
import com.zfoo.net.router.receiver.PacketReceiver;
import com.zfoo.net.session.model.Session;
import com.zfoo.protocol.util.JsonUtils;
import io.netty.handler.codec.http.HttpResponseStatus;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
/**
* @author godotg
* @version 3.0
*/
@Component
public class HttpServerController {
private static final Logger logger = LoggerFactory.getLogger(HttpServerController.class);
@PacketReceiver
public void atHttpHelloRequest(Session session, HttpHelloRequest request, HttpAttachment attachment) {
logger.info("receive [packet:{}] from client", JsonUtils.object2String(request));
var response = new HttpHelloResponse();
response.setMessage("Hello, this is the http server!");
attachment.setHttpResponseStatus(HttpResponseStatus.OK);
NetContext.getRouter().send(session, response, attachment);
}
}
@@ -0,0 +1,61 @@
/*
* Copyright (C) 2020 The zfoo Authors
*
* Licensed 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 com.zfoo.net.core.http;
import com.zfoo.net.packet.http.HttpHelloRequest;
import com.zfoo.net.packet.model.DecodedPacketInfo;
import com.zfoo.net.router.attachment.HttpAttachment;
import com.zfoo.protocol.exception.RunException;
import com.zfoo.protocol.util.StringUtils;
import com.zfoo.util.ThreadUtils;
import com.zfoo.util.net.HostAndPort;
import io.netty.handler.codec.http.FullHttpRequest;
import org.junit.Ignore;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.util.function.Function;
/**
* @author godotg
* @version 3.0
*/
@Ignore
public class HttpServerTest {
/**
* 访问下面这个网址:
* <p>
* http://127.0.0.1:9000/hello
*/
@Test
public void startServer() {
var context = new ClassPathXmlApplicationContext("config.xml");
var server = new HttpServer(HostAndPort.valueOf("127.0.0.1:9000"), new Function<FullHttpRequest, DecodedPacketInfo>() {
@Override
public DecodedPacketInfo apply(FullHttpRequest fullHttpRequest) {
var uri = StringUtils.trim(fullHttpRequest.uri());
if (uri.equals("/hello")) {
return DecodedPacketInfo.valueOf(HttpHelloRequest.valueOf("aaa"), HttpAttachment.valueOf(fullHttpRequest, null));
} else {
throw new RunException("未知的http路径[{}]", uri);
}
}
});
server.start();
ThreadUtils.sleep(Long.MAX_VALUE);
}
}
@@ -0,0 +1,45 @@
/*
* Copyright (C) 2020 The zfoo Authors
* Licensed 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 com.zfoo.net.packet.http;
import com.zfoo.protocol.IPacket;
/**
* @author godotg
* @version 3.0
*/
public class HttpHelloRequest implements IPacket {
public static final transient short PROTOCOL_ID = 1700;
private String message;
public static HttpHelloRequest valueOf(String message) {
var request = new HttpHelloRequest();
request.message = message;
return request;
}
@Override
public short protocolId() {
return PROTOCOL_ID;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
@@ -0,0 +1,40 @@
/*
* Copyright (C) 2020 The zfoo Authors
* Licensed 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 com.zfoo.net.packet.http;
import com.zfoo.protocol.IPacket;
/**
* @author godotg
* @version 3.0
*/
public class HttpHelloResponse implements IPacket {
public static final transient short PROTOCOL_ID = 1701;
private String message;
@Override
public short protocolId() {
return PROTOCOL_ID;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
+3
View File
@@ -73,6 +73,9 @@
<protocol id="1600" location="com.zfoo.net.packet.json.JsonHelloRequest"/>
<protocol id="1601" location="com.zfoo.net.packet.json.JsonHelloResponse"/>
<protocol id="1700" location="com.zfoo.net.packet.http.HttpHelloRequest"/>
<protocol id="1701" location="com.zfoo.net.packet.http.HttpHelloResponse"/>
</module>
<module id="4" name="js" minId="2000" maxId="3000">