Skip to content

Commit 7110f31

Browse files
committed
improve server answer speed
1 parent 700e714 commit 7110f31

File tree

1 file changed

+69
-17
lines changed

1 file changed

+69
-17
lines changed

src/happyx/ssr/server.nim

Lines changed: 69 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -297,13 +297,31 @@ template answer*(
297297
headersArr &= cookie & "\r\n"
298298
if headersArr.len > 0:
299299
headersArr.delete(headersArr.len-2..headersArr.len-1)
300-
when declared(statusCode):
301-
when statusCode is int:
302-
req.send(statusCode.HttpCode, $message, when useHeaders: headersArr else: defaultHeaders)
300+
301+
when enableSafeRequests:
302+
when declared(statusCode):
303+
when statusCode is int:
304+
req.send(statusCode.HttpCode, $message, when useHeaders: headersArr else: defaultHeaders)
305+
else:
306+
req.send(code, $message, when useHeaders: headersArr else: defaultHeaders)
303307
else:
304308
req.send(code, $message, when useHeaders: headersArr else: defaultHeaders)
305309
else:
306-
req.send(code, $message, when useHeaders: headersArr else: defaultHeaders)
310+
var data: string = "HTTP/1.1 "
311+
when declared(statusCode):
312+
when statusCode is int:
313+
data &= $statusCode
314+
else:
315+
data &= $code
316+
else:
317+
data &= $code
318+
when message is string:
319+
data &= "\c\LContent-Length:" & $len(message)
320+
data &= "\c\L" & (when useHeaders: headersArr else: defaultHeaders) & "\c\L\c\L" & message
321+
else:
322+
data &= "\c\LContent-Length:" & $len($message)
323+
data &= "\c\L" & (when useHeaders: headersArr else: defaultHeaders) & "\c\L\c\L" & $message
324+
req.unsafeSend(data)
307325
# HTTP BEAST
308326
elif enableHttpBeast:
309327
when useHeaders:
@@ -330,7 +348,7 @@ template answer*(
330348
let data = cookie.split(":", 1)
331349
h.add("Set-Cookie", data[1].strip())
332350
else:
333-
let h = newHttpHeaders([("Content-Type", "text/plain; charset=utf-8")])
351+
let h = newHttpHeaders([("Content-Type", "text/plain;charset=utf-8")])
334352
when declared(statusCode):
335353
when statusCode is int:
336354
await req.respond(statusCode.HttpCode, $message, h)
@@ -379,29 +397,63 @@ template answer*(
379397
when enableHttpx:
380398
var headersArr = ""
381399
for key, value in h.pairs():
382-
headersArr &= key & ':' & value & "\r\n"
400+
headersArr &= key & ':' & value & "\c\L"
383401
when declared(outCookies):
384402
for cookie in outCookies:
385-
headersArr &= cookie & "\r\n"
403+
headersArr &= cookie & "\c\L"
386404
if headersArr.len > 0:
387405
headersArr.delete(headersArr.len-2..headersArr.len-1)
388406
if contentLength.isSome:
389407
# useful for file answers
390-
when declared(statusCode):
391-
when statusCode is int:
392-
req.send(statusCode.HttpCode, $message, contentLength, headersArr)
408+
when enableSafeRequests:
409+
when declared(statusCode):
410+
when statusCode is int:
411+
req.send(statusCode.HttpCode, $message, contentLength, headersArr)
412+
else:
413+
req.send(code, $message, contentLength, headersArr)
393414
else:
394415
req.send(code, $message, contentLength, headersArr)
395416
else:
396-
req.send(code, $message, contentLength, headersArr)
417+
var data: string = "HTTP/1.1 "
418+
when declared(statusCode):
419+
when statusCode is int:
420+
data &= $statusCode
421+
else:
422+
data &= $code
423+
else:
424+
data &= $code
425+
when message is string:
426+
data &= "\c\LContent-Length:" & $contentLength.get()
427+
data &= "\c\L" & headersArr & "\c\L\c\L" & message
428+
else:
429+
data &= "\c\LContent-Length:" & $contentLength.get()
430+
data &= "\c\L" & headersArr & "\c\L\c\L" & $message
431+
req.unsafeSend(data)
397432
else:
398-
when declared(statusCode):
399-
when statusCode is int:
400-
req.send(statusCode.HttpCode, $message, headersArr)
433+
when enableSafeRequests:
434+
when declared(statusCode):
435+
when statusCode is int:
436+
req.send(statusCode.HttpCode, $message, headersArr)
437+
else:
438+
req.send(code, $message, headersArr)
401439
else:
402440
req.send(code, $message, headersArr)
403441
else:
404-
req.send(code, $message, headersArr)
442+
var data: string = "HTTP/1.1 "
443+
when declared(statusCode):
444+
when statusCode is int:
445+
data &= $statusCode
446+
else:
447+
data &= $code
448+
else:
449+
data &= $code
450+
when message is string:
451+
data &= "\c\LContent-Length:" & $len(message)
452+
data &= "\c\L" & headersArr & "\c\L\c\L" & message
453+
else:
454+
data &= "\c\LContent-Length:" & $len($message)
455+
data &= "\c\L" & headersArr & "\c\L\c\L" & $message
456+
req.unsafeSend(data)
405457
# HTTP BEAST
406458
elif enableHttpBeast:
407459
var headersArr = ""
@@ -440,7 +492,7 @@ when enableHttpBeast:
440492

441493

442494
template answerJson*(req: Request, data: untyped, code: HttpCode = Http200,
443-
headers: HttpHeaders = newHttpHeaders([("Content-Type", "application/json; charset=utf-8")])): untyped =
495+
headers: HttpHeaders = newHttpHeaders([("Content-Type", "application/json;charset=utf-8")])): untyped =
444496
## Answers to request with json data
445497
##
446498
## ⚠ `Low-level API` ⚠
@@ -461,7 +513,7 @@ template answerJson*(req: Request, data: untyped, code: HttpCode = Http200,
461513

462514

463515
template answerHtml*(req: Request, data: string | TagRef, code: HttpCode = Http200,
464-
headers: HttpHeaders = newHttpHeaders([("Content-Type", "text/html; charset=utf-8")])): untyped =
516+
headers: HttpHeaders = newHttpHeaders([("Content-Type", "text/html;charset=utf-8")])): untyped =
465517
## Answers to request with HTML data
466518
##
467519
## ⚠ `Low-level API` ⚠

0 commit comments

Comments
 (0)