mirror of
https://github.com/tiennm99/zfoo.git
synced 2026-08-06 02:24:25 +00:00
test[http]: http server的使用示例
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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">
|
||||
|
||||
Reference in New Issue
Block a user