나는 웹 기반 프론트 엔드 을 사용하여 컨트롤러/통신 응용 프로그램을 작성했으며 node.js (0.8.15)을 사용했습니다. socket.io은 정기적 인 데이터 교환을 수행합니다.node.js 스크립트 블록 (비글 본)
필자의 백엔드는 매초 3 개의 임베디드 보드와 (rs232에서 19200bps로) 통신해야합니다. 이 보드는 통신 장애가 더 길어지면 워치 독을 트리거합니다.
node.js 앱을 시작하면 모든 것이 정상입니다. 통신이 작동합니다. 내 웹 서버에 연결되면 즉시 시간에 대한 이 표시됩니다. rs232 통신이 약 5-10 초 동안 중지 된 것을 볼 수 있습니다.
웹 페이지를 다시로드 할 때이 효과가 나타나지 않습니다. http 또는 https를 사용하면 아무런 효과가 없습니다. 또는 --noalways_full_compiler 아무것도 변경되지 않습니다 --noopt --nolazy 또는 같은 옵션 노드를 실행하려고 . 여기
내 웹 서버의 관련 부분입니다 : 하나의 웹 서버에 대한 와 시리얼 통신을위한 하나var requests =
[ { method: 'GET', pattern: '/', type: 'text/html', subst: '/index.html' },
{ method: 'GET', pattern: '/index.html', type: 'text/html' },
{ method: 'GET', pattern: '/favicon.ico', type: 'image/x-icon' },
{ method: 'GET', pattern: '/js/[^/]+\.js', type: 'text/javascript' },
{ method: 'GET', pattern: '/css/[^/]+\.css', type: 'text/css' },
{ method: 'GET', pattern: '/img/[^/]+\.jpg', type: 'image/jpeg' },
{ method: 'GET', pattern: '/img/[^/]+.png', type: 'image/png' },
];
function response (req, res)
{
var method = req.method;
var path = Path.normalize (Url.parse (req.url).pathname);
console.log (method+' '+path);
for (i = -1; ++i < requests.length;)
{
var r = requests[i];
if (r.method == method && path.search ('^'+r.pattern+'$') == 0)
{
if ('subst' in r)
{
path = r.subst;
};
if (r.type.match (/^text/))
{
Fs.readFile (__dirname+path, 'utf8', function (err, data)
{
if (err)
{
res.writeHead (500);
res.end ('Error reading '+path);
}
else
{
res.writeHead (200, {'Content-Type': r.type});
res.end (data, 'utf8');
}
});
return;
}
else
{
Fs.readFile (__dirname+path, function (err, data)
{
if (err)
{
res.writeHead (500);
res.end ('Error reading '+path);
}
else
{
res.writeHead (200, {'Content-Type': r.type});
res.end (data);
}
});
return;
}
}
};
console.log ('error 404');
res.writeHead (404);
res.end();
}
var httpServer = Http.createServer (response);
httpServer.listen (47080);
console.log ('http server running at port 47080');
var basic = Auth ({
authRealm : "controller",
authFile : __dirname + '/users.htpasswd'
});
function httpsResponse (req, res)
{
basic.apply (req, res, function (username)
{
response (req, res);
});
}
var options = {
key: Fs.readFileSync (__dirname + '/controller.pem'),
cert: Fs.readFileSync (__dirname + '/controller.cert')
};
var httpsServer = Https.createServer (options, httpsResponse);
httpsServer.listen(47443);
console.log ('https server running at port 47443');
function connected (socket)
{
console.log ('Listener connected');
theApp.addSocket (socket);
socket.on ('disconnect', function()
{
theApp.removeSocket (socket);
});
}
var httpListen = Io.listen (httpServer, { 'log level':1 });
var httpsListen = Io.listen (httpsServer, { 'log level':1 });
httpListen.sockets.on ('connection', connected);
httpsListen.sockets.on ('connection', connected);
이 코드 스 니펫에는 몇 가지 문제가 있습니다. 우선, 가장 중요한 것은 틀림없이, 이집트 중괄호 및 함수 주위의 간격과 같은 노드 규칙을 따르지 않는 것입니다. 일부 팁을 보려면 [여기] (http://nodeguide.com/style.html)를보십시오. – qubyte
'var'가없는 변수 'i'가 훨씬 더 중요하므로 전역 적으로 할당 (또는 업데이트)됩니다. 첫 번째'for' 루프의 증가분은 두 번째보다는 세 번째 위치에 있어야합니다. 블록 중 일부에는 세미콜론이 오는데 거기에는 없어야합니다. 소켓 단절 이벤트는 아마도'on'보다는'once'로 처리되어야합니다. '요청'이 무엇인지 확실하지 않습니다. 이게 뭐야? – qubyte
요청을 추가했습니다 (위 참조). – user1728219