저는 TCP 및 서버 연결 관련 문제에 대해 꽤 익숙합니다. 저는 서버에 연결된 사용자의 포트가 열려 있는지 또는 닫혀 있는지 확인하고 프런트 엔드에 메시지를 표시 할시기를 결정하고 포트 상태를 알리는 기능을 구현하는 작업을 맡았습니다.
너무 많은 연구 끝에 나는이 연결을 만드는 방법을 여전히 알 수 없으며, 기능이 프론트 엔드에서 실행되어야하므로 더 어려워집니다. 나는 백엔드에서 이와 동일한 기능을 구현하려고 시도 했으며이 npm 패키지로 내가 원하는 것을 얻을 수있었습니다 . 그러나이 net
패키지는 NodeJ 의 패키지에 의존 하기 때문에 클라이언트 측에서 사용할 수 없습니다.
WebSockets 및 이미지로 일부 사용자 지정 함수를 구현했지만 연결 상태를 가져 오는 대신 브라우저에서 항상 net:: ERR_EMPTY_RESPONSE
오류가 발생합니다.
다음은 문제가 무엇인지 파악하기 위해 지금까지 작성한 코드 중 일부입니다. 나는 올바른 방향으로 지적되어 정말 감사하겠습니다. 감사합니다
export const checkSocketIoConnect = (url, timeout) => {
return new Promise(function(resolve, reject) {
let errAlready = false;
timeout = timeout || 50000;
let socket = io(url, {
transport: ['websocket'],
reconnection: true, timeout: timeout, reconnectionDelay: 1000,
reconnectionAttempts: 50,
rejectUnauthorized: false
});
// success
socket.on('connect', function() {
console.log('connecting succesfulyy');
clearTimeout(timer);
resolve();
socket.close();
});
// set our own timeout in case the socket ends some other way than what we are listening for
let timer = setTimeout(function() {
console.log('timer');
timer = null;
error('local timeout');
}, timeout);
// common error handler
const error = (data) => {
console.log('errrror');
if (timer) {
clearTimeout(timer);
timer = null;
}
if (!errAlready) {
errAlready = true;
reject(data);
socket.disconnect();
}
};
// errors
socket.on('connect_error', error);
socket.on('connect_timeout', error);
socket.on('error', error);
socket.on('disconnect', error);
});
};
export const newPortChecker = (url) => {
let websocket = new WebSocket(url);
// websocket.send('pinging server');
websocket.onopen = function(event) {
setInterval(() => {
websocket.send('ping');
}, 30000);
console.log(event);
};
websocket.onmessage = function(event) {
console.log(event.data);
};
websocket.onerror = function(event) {
console.log(event);
};
websocket.onclose = function(event) {
console.log(event);
};
};
export const portChecker = (cb, host, port, timeout) => {
let timeouts = (timeout == null) ? 100 : timeout;
let img = new Image();
img.onerror = function() {
if (!img) return;
img = undefined;
console.log('open');
cb('open');
};
img.onload = img.onerror;
img.src = 'https://' + host + ':' + port;
setTimeout(function() {
if (!img) return;
img = undefined;
console.log('closed');
cb('closed');
}, timeouts);
};
내가 찾은이 패키지를 사용하여이 문제를 해결할 수있었습니다. 패키지는 DOM의 이미지를 사용합니다. 나중에이 문제를 해결하려는 모든 사람을위한 것입니다. https://github.com/ItsAsbreuk/itsa-browser-portscan
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다